2016-11-30 346 views
1

你好批处理文件专家,嵌套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 

我错过这里,是因为它的当外环存在其作品完美,没有它变过去未与值设置。

感谢,

+0

您的变量回显错误,您有一个名为last的变量,它只在技术上最后一个,而不是整个。 _(这在技术上只回应每个文件并设置到最新找到的参数的最后修改后的匹配文件)_。 – Compo

+0

[在'for'循环中使用变量]可能的重复(http://stackoverflow.com/questions/6373307/use-a-variable-in-a-for-loop) – aschipfl

+0

太多人使用for循环默认的编码方法没有考虑到可能的替代方法,没有理由不提出忽略'!last!'或'call %% last %%'的替代方案。 – Compo

回答

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 

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

+0

感谢这个解决方案,它正是我期待的。现在我将尝试理解逻辑。 –

0

您需要使用delayed expansion(近万因此,在这个项目)或使用子程序或

call echo %%last%%