gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:58:10 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com