CMD/BAT - Цикл в цикле. Подставлять параметр skip

Ответить
Аватара пользователя
splin0000

CMD/BAT - Цикл в цикле. Подставлять параметр skip

Сообщение splin0000 »

Добрый день, подскажите пожалуйста. Пытаюсь через 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

Re: CMD/BAT - Цикл в цикле. Подставлять параметр skip

Сообщение Foreigner »

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

Re: CMD/BAT - Цикл в цикле. Подставлять параметр skip

Сообщение Georgio »

Цитата Foreigner:



В скип нельзя подставить встроенную переменную цикла (%%i)
CMD/BAT - Цикл в цикле. Подставлять параметр skip








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





Вот так:





Код:

Код: Выделить всё

@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

.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»