Batch file 使用可变参数对子字符串化文本文件无效
我试图从存储在变量“user”中的文本文件中对字符串进行子串。每个循环的子串参数都是递增的,这样我就可以处理下一个数据。但是,我给子字符串命令的变量参数“Inc”似乎没有在for循环中更新其值。 我已经使用了SETLOCAL EnableDelayedExpansion,但没有成功。下面是一段代码: 注:“Inc”之前定义为整数,初始值为21。 我希望变量“test”的每个循环都应该是:user”41,20的子字符串。。61,20 .. 81,20 .. 等等但问题是,对于所有12个循环,substring命令中的“Inc”保持值41,并且从不增加,即使下面的echo Inc命令显示它确实增加了。 感谢您在这个问题上的帮助Batch file 使用可变参数对子字符串化文本文件无效,batch-file,Batch File,我试图从存储在变量“user”中的文本文件中对字符串进行子串。每个循环的子串参数都是递增的,这样我就可以处理下一个数据。但是,我给子字符串命令的变量参数“Inc”似乎没有在for循环中更新其值。 我已经使用了SETLOCAL EnableDelayedExpansion,但没有成功。下面是一段代码: 注:“Inc”之前定义为整数,初始值为21。 我希望变量“test”的每个循环都应该是:user”41,20的子字符串。。61,20 .. 81,20 .. 等等但问题是,对于所有12个循环,sub
:setfunc
echo. >>parsed.txt
IF !inew!==48 (
for /L %%g IN (1,1,12) do (
Set test=!user:~%Inc%,20!
echo !test!
echo !user:~%Inc%,20! >>parsed.txt
Set /a Inc=!Inc!+20
echo count=%%g
echo Inc=!Inc!
)
问题是,您正在对一个变量(
Inc
)使用立即的%
-扩展,该变量的值在同一代码块中发生变化,即for/L
循环
要解决这个问题,您需要另一层变量扩展。有以下几种选择:
,并使用其元变量展开,这发生在延迟展开之前:
>“parsed.txt”(
对于/L%%g in(1,1,12)do(
对于(!Inc!)中的%%i,请执行以下操作(
回声(!用户:~%%i,20!
设置/A“Inc+=20”
)
)
)
我认为这是最好的方法,因为它是最快的方法
调用
,它会在延迟扩展后启动另一个%
-扩展:
>“parsed.txt”(
对于/L%%g in(1,1,12)do(
呼叫回显(%%用户:~!Inc!,20%
设置/A“Inc+=20”
)
)
需要双倍的%
-符号来逃离第一个%
-扩展阶段,并将%
完全抛在后面Inc
是纯数字(或者更准确地说,是一个有符号的32位整数),您也可以将for/F
与set/a
一起使用:
>“parsed.txt”(
对于/L%%g in(1,1,12)do(
对于/F%%i in('set/A“Inc'),请执行以下操作(
回声(!用户:~%%i,20!
设置/A“Inc+=20”
)
)
)
这是因为当由for/F
运行时,set/A
在cmd
上下文中执行,而不是在批处理上下文中执行,在批处理上下文中它返回其(最终)结果,然后由for/F
捕获
在这种情况下,这不是一种非常实用的方法,尽管在涉及到for/F
循环时可能会考虑这种方法您需要另一层扩展,可能是
callset“test=%%user:~!Inc!,20%%”
和Call Echo%%user:~!Inc!,20%%
。顺便说一句,我已经编辑了您的问题代码以包含缩进,这有助于突出显示您的代码缺少右括号。请查看这篇密切相关的帖子: