PDA

Показать полную графическую версию : Цикл в цикле. Подставлять параметр skip


splin0000
05-06-2015, 12:28
Добрый день, подскажите пожалуйста. Пытаюсь через 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
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
В скип нельзя подставить встроенную переменную цикла (%%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

.




© OSzone.net 2001-2012