for /F "skip=n tokens=3 delims= " %%i in (myfile.txt) do echo %%i
是否有可能 skip=n ...
是一个像 skip=%test% ...
这样的变量,其中 %test%
有一个整数值?
因此,我尝试添加一列数据,该表在文件中的位置由字符串给出。
例如:
$startTable
0 1 4
1 2 4
2 1 4
$endTable
所以这个表的位置由与 $startTable 关联的行号给出。我将其值存储在变量 (!test!) 中,因此我需要 skip=!test!然后我开始添加第三列,直到我点击 $endTable。
当我尝试时;
for /f "skip=!test! tokens=3 delims= " %%j in (!INPUTFILE!) do (
echo %%j
if %%j == "$endTable" goto :break
set /a test2+=%%j
)
:break
我收到以下错误;
!test! tokens=3 delims= " was unexpected at this time.
-GK
最佳答案
for 不喜欢在参数中采用延迟扩展语法。那应该没问题,因为您不需要它。改用标准的 % 包装变量 - 这就是 Michael 和 Jebego 的示例所使用的。
如果你真的想使用延迟扩展版本,你需要一个临时变量来做:
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.
关于batch-file - 批处理脚本 "for/f ...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6390900/