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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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循环批处理脚本_Batch File_For Loop_Nested Loops - Fatal编程技术网

Batch file 嵌套for循环批处理脚本

Batch file 嵌套for循环批处理脚本,batch-file,for-loop,nested-loops,Batch File,For Loop,Nested Loops,大家好,批处理文件专家 我编写了这段代码,与作为参数发送的文件名相比,它将打印文件夹中存在的最新文件版本,但是,当我删除外部for循环时,这些行似乎会相应地工作,我设计该循环的次数与CLI参数的次数相同 FOR /f %%f IN ('DIR /b %%a.*.zip') DO @SET last=%%f ECHO %last% 完整代码: cd C:\Users\batch\Desktop\test chdir set arg1=%1 set arg2=%2 set list=%arg1

大家好,批处理文件专家

我编写了这段代码,与作为参数发送的文件名相比,它将打印文件夹中存在的最新文件版本,但是,当我删除外部for循环时,这些行似乎会相应地工作,我设计该循环的次数与CLI参数的次数相同

FOR /f %%f IN ('DIR /b %%a.*.zip') DO @SET last=%%f
ECHO %last%
完整代码:

cd C:\Users\batch\Desktop\test
chdir


set arg1=%1
set arg2=%2
set list=%arg1% %arg2%


(for %%a in (%list%) do (


FOR /f %%f IN ('DIR /b %%a.*.zip') DO @SET last=%%f

ECHO %last%

)) 

pause
我在这里遗漏了什么,因为当存在外部循环时,哪个变量last没有设置值,而没有外部循环,它就可以完美地工作


谢谢,

您需要使用
延迟扩展
(大约一万个项目),或者使用子程序或

call echo %%last%%

您需要使用
延迟扩展
(大约一万个项目)或使用子例程或

call echo %%last%%

我是否可以建议您改用SHIFT:

@Echo关闭
SetLocal
如果%1'=='退出/B
如果/I不是“%CD%”,则=“%USERPROFILE%\Desktop\test”(
PushD“%USERPROFILE%\Desktop\test”2>num&&(Set=PopD)| |退出/B)
:循环
对于(“%1*.zip”)中的%%A,请设置“last=%%A”
Echo=%last%
移位
如果不是%1'='转到循环
%_%
端部
超时-1

当然,这意味着您可以自由地将其用于两个以上的参数

我是否可以建议您改用SHIFT:

@Echo关闭
SetLocal
如果%1'=='退出/B
如果/I不是“%CD%”,则=“%USERPROFILE%\Desktop\test”(
PushD“%USERPROFILE%\Desktop\test”2>num&&(Set=PopD)| |退出/B)
:循环
对于(“%1*.zip”)中的%%A,请设置“last=%%A”
Echo=%last%
移位
如果不是%1'='转到循环
%_%
端部
超时-1

当然,这意味着您可以自由地将其用于两个以上的参数

变量的回音出现在错误的位置,您得到了一个名为last的变量,从技术上讲,它只是最后一个,而不是整个变量。(从技术上讲,它只是回显每个文件,并设置为最新找到的参数的最后一个修改的匹配文件)。可能有太多人使用for循环作为默认编码方法,而没有考虑可能的替代方法,没有理由忽略替代方法
!最后
调用%%last%%
。变量的回显位置错误,您的变量名为last,从技术上讲,它只在末尾,而不是在整个过程中。(从技术上讲,它只是回显每个文件,并设置为最新找到的参数的最后一个修改的匹配文件)。可能有太多人使用for循环作为默认编码方法,而没有考虑可能的替代方法,没有理由忽略替代方法
!最后
调用%%last%%
。感谢您提供此解决方案,这正是我想要的。现在我将尝试理解逻辑。感谢这个解决方案,这正是我所期待的。现在我将试着理解其中的逻辑。