Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Цикл в цикле. Подставлять параметр skip (http://forum.oszone.net/showthread.php?t=300781)

splin0000 05-06-2015 12:28 2515227

Цикл в цикле. Подставлять параметр skip
 
Добрый день, подскажите пожалуйста. Пытаюсь через bat файл реализовать на вид довольно простой функционал, но никак не могу разобраться с синтаксисом


for /L %%i in (0,1,2) do //Делаю цикл, который пройдется от 0 до 5 с шагом 1
(
for /f "UsebackQ skip=%%i" %%A IN ("000.txt") do (set "000=%%~A") //внутри этого цикла делаю другой цикл в котором смотрю в файл на строчку № %%i
)

Вот и не могу разобраться, где косяк, точнее как правильно расставить ковычки, чтобы параметр skip брался из переменной %%i
В результате вижу "Непредвиденное появление i%

Заранее спасибо

Foreigner 05-06-2015 17:03 2515311

splin0000, В скип нельзя подставить встроенную переменную цикла (%%i):
Код:

@echo off
setlocal

for /l %%i in (1,1,5) do call:for "%%i"
goto:eof

:for
set "skip=%~1"
for /f "skip=%skip%" %%i in (....


Georgio 05-06-2015 21:07 2515361

Цитата:

Цитата Foreigner
В скип нельзя подставить встроенную переменную цикла (%%i) »



Можно, но сложно.


Вот так:

Код:

@echo off

for /l %%i in (1,1,5) do (
 cmd/c "for /f "usebackq skip=%%i" %%A in ("000.txt") do @echo.%%~A"
 echo.
 )
)

pause>nul

.


Или так:

Код:

@echo off

for /l %%i in (1,1,5) do (
 for /f %%A in ('for /f "usebackq skip=%%i" %%j in ("000.txt"^) do @echo.%%j') do (
  echo.%%~A
  )
 echo.
 )
)

pause>nul

.


Другое дело, что

1) "skip" не может быть равен нулю, и

2) Вам нужно присваивать переменной "000" значения, равные "%%~A"
(правда, не понимаю, для чего нужно это "переприсваивание").


Поэтому с учётом этих двух пунктов Ваш код будет выглядеть примерно так:

Код:

@echo off

for /l %%i in (0,1,5) do (
 if %%i equ 0 (
  for /f "usebackq" %%A in ("000.txt") do (
  set 000=%%~A
  cmd/v/c echo.!000!
  )
 ) else (
  for /f %%A in ('for /f "usebackq skip=%%i" %%j in ("000.txt"^) do @echo.%%j') do (
  set 000=%%~A
  cmd/v/c echo.!000!
  )
 )
 echo.
)

pause>nul

.


Время: 21:33.

Время: 21:33.
© OSzone.net 2001-