2011-12-07 57 views
1

我想獲得一個(分號分隔)的目錄中的所有.dll和.exe列表作爲變量作爲參數傳遞給可執行文件。我已經嘗試了一些東西,但它不會像預期的那樣工作。我有有一部分的方式 - 下面的打印出來後,我的文件的列表:如何創建使用DOS批處理文件傳遞給可執行文件的文件列表?

CLS 
@ECHO OFF 
SET INPUT_FILES= 
for /f %%x in ('dir /b E:\Builds\MyProgram\Release\*.exe E:\Builds\MyProgram\Release\*.dll') do ECHO %%x 

...但下一步是不完全正確,我奮力什麼我有錯:

CLS 
@ECHO OFF 
SET INPUT_FILES= 
for /f %%x in ('dir /b E:\Builds\MyProgram\Release\*.exe E:\Builds\MyProgram\Release\*.dll') do IF DEFINED INPUT_FILES SET INPUT_FILES=INPUT_FILES;%%X ELSE SET INPUT_FILES=%%X 
ECHO %INPUT_FILES% 

我要通過%INPUT_FILES%作爲輸入到另一個可執行文件,如果我可以計算出如何在這裏解決問題。

編輯

如果我做了下面的命令,我可以更新INPUT_FILES變量:

IF "%INPUT_FILES%"=="" (SET INPUT_FILES=Test1) ELSE (SET INPUT_FILES=Test1a) 
IF "%INPUT_FILES%"=="" (SET INPUT_FILES=Test2) ELSE (SET INPUT_FILES=%INPUT_FILES%;Test2a) 
ECHO %INPUT_FILES% 

..這輸出:

Test1;Test2a 

..但如果我嘗試並添加到FOR循環我什麼也沒得到:

CLS 
REM @ECHO OFF 
SET INPUT_FILES= 
for /f %%X in ('dir /b E:\Builds\MyProgram\Release\*.exe E:\Builds\MyProgram\Release\*.dll') do (IF "%INPUT_FILES%"=="" (SET INPUT_FILES=%%X) ELSE (SET INPUT_FILES=%INPUT_FILES%;%%X)) 
ECHO %INPUT_FILES% 

回答

3

問題是百分比變量的擴展。
這些在解析的時候進行了擴展(也對塊)。

更好地使用延遲擴展,語法幾乎相同,但用!variable!代替%variable%
區別在於:擴展發生在執行時不在解析時間。

@ECHO OFF 
CLS 
setlocal EnableDelayedExpansion 
SET "INPUT_FILES=" 
for /f %%X in ('dir /b E:\Builds\*.exe E:\Builds\*.dll') do (
    IF "!INPUT_FILES!"=="" (
    SET "INPUT_FILES=%%X" 
) ELSE (
    SET "INPUT_FILES=!INPUT_FILES!;%%X" 
) 
) 
ECHO !INPUT_FILES! 
+0

太棒了 - 我之前看過一個例子中的感嘆號,但沒有'setlocal EnableDelayedExpansion'這行,所以他們沒有正確評估。 –

+0

如果只是添加每個名稱後面跟一個分號,並且在最後刪除最後一個分號:'for/f %% X in('dir ...'),您可以避免使用'IF'命令SET SET INPUT_FILES =!INPUT_FILES !%% X;「'和SET INPUT_FILES =!INPUT_FILES:〜0,-1!' – Aacini

相關問題