for не любит принимать синтаксис отложенного расширения внутри параметров.Это должно быть хорошо, так как вам это не нужно.Вместо этого используйте стандартную переменную% wrapped - это то, что используют примеры Майкла и Джебего.
Если вы действительно хотите использовать версию с отложенным расширением, вам понадобится временная переменная, чтобы сделать это:
set for_parameters="skip=!test! tokens=3 delims= "
for /f %for_parameters% %%j in (!INPUTFILE!) do ( echo %%j
РЕДАКТИРОВАТЬ: Вот то, что я бегу, пытаясь остаться близко к вашим исходным именам параметров.Я изменил ввод, чтобы показать, что% j обновляется и какие строки анализируются.
stackoverflow_input.txt
$startTable
0 1 3
1 2 4
2 1 5
$endTable
stackoverflow1.bat
@setlocal enabledelayedexpansion
@echo off
set INPUTFILE=stackoverflow_input.txt
set test=3
set test2=0
set for_parameters="skip=!test! tokens=3 delims= "
for /f %for_parameters% %%j in (!INPUTFILE!) do (
echo %%j
if %%j == "#endTable" goto :break
set /a test2+=%%j
)
:break
echo Sum: %test2%
endlocal
stackoverflow2.bat
@setlocal enabledelayedexpansion
@echo off
set INPUTFILE=stackoverflow_input.txt
set test=3
set test2=0
for /f "skip=%test% tokens=3 delims= " %%j in (!INPUTFILE!) do (
echo %%j
if %%j == "#endTable" goto :break
set /a test2+=%%j
)
:break
echo Sum: %test2%
endlocal
Результаты (проверено на Win 7, Server 2008R2, Server 2003 и Win XP SP3):
D:\temp>stackoverflow1.bat
4
5
Sum: 9
D:\temp>stackoverflow2.bat
4
5
Sum: 9
Если расширения команд отключены, вместо этого вы получите:/f was unexpected at this time.