嵌套for循环 - 批处理脚本

时间:2016-11-30 12:23:51

标签: batch-file for-loop nested-loops

Hello Batch File专家,

我编写了这段代码,它将打印文件夹中存在的最新文件版本,与作为参数发送的文件名进行比较,但是当我删除外部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没有设置值,没有它就可以正常工作。

谢谢,

2 个答案:

答案 0 :(得分:0)

您需要使用delayed expansion(此处约有一万件SO物品)或使用子程序或

call echo %%last%%

答案 1 :(得分:0)

我建议您改用SHIFT:

@Echo Off
SetLocal
If %1'==' Exit/B
If /I Not "%CD%"=="%USERPROFILE%\Desktop\test" (
    PushD "%USERPROFILE%\Desktop\test" 2>Nul&&(Set _=PopD)||Exit/B)
:Loop
For %%A In ("%~1*.zip") Do Set "last=%%A"
Echo=%last%
Shift
If Not %1'==' GoTo Loop
%_%
EndLocal
Timeout -1

这当然意味着您可以自由地使用两个以上的参数!