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 为什么';当一个语句使用另一个for循环变量打印时,它是否可以使用for循环变量打印?_Batch File - Fatal编程技术网

Batch file 为什么';当一个语句使用另一个for循环变量打印时,它是否可以使用for循环变量打印?

Batch file 为什么';当一个语句使用另一个for循环变量打印时,它是否可以使用for循环变量打印?,batch-file,Batch File,所以,我在处理一些代码时遇到了一个奇怪的问题。我在一个名为“tests”的文件中有一个字符串,即“1:23195068336843541324”。我想要一个for循环来查找第3个字符,并在此基础上查找一定数量的以第7个字符开头的字符。在这种情况下,我想找到第7和第8个字符。所以我提出了这个嵌套for循环: @ECHO off SETLOCAL EnableDelayedExpansion FOR /L %%i IN (1,1,5) DO ( FOR /F %%j IN ('FINDSTR

所以,我在处理一些代码时遇到了一个奇怪的问题。我在一个名为“tests”的文件中有一个字符串,即“1:23195068336843541324”。我想要一个for循环来查找第3个字符,并在此基础上查找一定数量的以第7个字符开头的字符。在这种情况下,我想找到第7和第8个字符。所以我提出了这个嵌套for循环:

@ECHO off
SETLOCAL EnableDelayedExpansion
FOR /L %%i IN (1,1,5) DO (
    FOR /F %%j IN ('FINDSTR /C:"%%i:" tests.txt') DO (
        SET PH=%%j
        SET mon=!PH:~2,1!
        ECHO !mon!
        SET test%%i=!PH:~6,%mon%!
        ECHO !test1!))
ECHO语句纯粹用于调试,因此我可以看到设置为什么

但是每次它输出
ECHO时都是关闭的
,因为
test1
从未设置过。我用这个循环重新创建了它:

SETLOCAL EnableDelayedExpansion
SET test=123
SET number=2
FOR /L %%i IN (1,1,5) DO (
SET t%%i=!test:~1,%number%!
ECHO !t1!)

而且效果很好。如果我在第一个循环中为
mon
输入一个数字,它也可以正常工作。我做错了什么?谢谢

我想这就是你想要做的。我真的不明白你为什么要做你现在正在做的事情,这是帮助别人编写代码的一半

@ECHO off
SETLOCAL EnableDelayedExpansion
FOR /L %%j IN (1,1,5) DO (
    FOR /F %%i IN ('FINDSTR /C:"%%j:" tests.txt') DO (
        SET PH=%%i
        SET mon=!PH:~2,1!
        ECHO mon=!mon!
        FOR /F "delims=" %%G IN ("!mon!") do SET test%%j=!PH:~6,%%G!
        ECHO test%%j=!test%%j!
    )
)

按字母顺序使用变量。
PH
必须在
mon
之前设置,因为
mon
取决于
PH
。不管怎样,字母顺序都不重要。您似乎对延迟扩展的工作原理感到困惑。我对如何以不同的顺序使用这些变量感到困惑,因为它们相互依赖,并且语法要求
PH
mon
之前。举一个这样的例子可以帮助我澄清我的困惑。我想你不理解我之前关于按字母顺序使用
FOR
变量的评论。您在评论中列出了您的环境变量。那当然没关系。但在某些情况下,如果您在外循环中使用
%%j
并在内环中使用
%%i
,则如果您在内环
中使用
标记
选项进行
操作,内环可能会破坏外环
%%j
。我的用例非常模糊,难以描述,但是你成功地为它创建了一个解决方案。非常感谢。唯一的问题是我不理解代码。添加第三个for循环有什么作用?为什么这能解决我的问题?归根结底都是因为延迟扩张。不能在延迟扩展中使用延迟扩展。无法使用:
%mon%
,因为它需要延迟扩展才能使用。您也不能这样做:
SET test%%i=!博士:~6,!周一。因此,您需要某种方法来扩展变量,以便将其用作子字符串长度。由于
mon
只包含一个简单的整数,您可以通过将最里面的
for/F
循环替换为标准的
for
循环来简化方法,如下所示:
for%%G in(“!mon!”)请设置test%%j=!PH:~6,%%~G..@aschipfl,你说得对。我完全无视我的常规最佳实践,即何时使用
FOR
FOR/F
。英雄联盟