2016-11-30 344 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%%