batch-file - 批处理脚本 "for/f ..."

标签 batch-file cmd

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/

相关文章:

batch-file - 批量发声?

windows - 使用批处理文件附加到系统 PATH 变量值

windows - 如何列出子目录中的所有 PNG 图像?

windows - 以字符串作为分隔符拆分字符串

windows - 将 Unicode 字符打印到 shell

java - 重新启动在远程计算机上运行的远程 tomcat?

string - Windows 批处理 : find a string in file with "[" in the string

java - 如何在.bat上拖放多个文件?

windows - 调用 "start myapp"和 "myapp"的区别

windows - Powershell 中的访问被拒绝