Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用可变参数对子字符串化文本文件无效_Batch File - Fatal编程技术网

Batch file 使用可变参数对子字符串化文本文件无效

Batch file 使用可变参数对子字符串化文本文件无效,batch-file,Batch File,我试图从存储在变量“user”中的文本文件中对字符串进行子串。每个循环的子串参数都是递增的,这样我就可以处理下一个数据。但是,我给子字符串命令的变量参数“Inc”似乎没有在for循环中更新其值。 我已经使用了SETLOCAL EnableDelayedExpansion,但没有成功。下面是一段代码: 注:“Inc”之前定义为整数,初始值为21。 我希望变量“test”的每个循环都应该是:user”41,20的子字符串。。61,20 .. 81,20 .. 等等但问题是,对于所有12个循环,sub

我试图从存储在变量“user”中的文本文件中对字符串进行子串。每个循环的子串参数都是递增的,这样我就可以处理下一个数据。但是,我给子字符串命令的变量参数“Inc”似乎没有在for循环中更新其值。 我已经使用了SETLOCAL EnableDelayedExpansion,但没有成功。下面是一段代码: 注:“Inc”之前定义为整数,初始值为21。 我希望变量“test”的每个循环都应该是:user”41,20的子字符串。。61,20 .. 81,20 .. 等等但问题是,对于所有12个循环,substring命令中的“Inc”保持值41,并且从不增加,即使下面的echo Inc命令显示它确实增加了。 感谢您在这个问题上的帮助

: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%%
    。顺便说一句,我已经编辑了您的问题代码以包含缩进,这有助于突出显示您的代码缺少右括号。请查看这篇密切相关的帖子: