我希望将目录中所有.dll和.exe的(以分号分隔)列表作为变量传递给可执行文件。我尝试过一些东西,但它从来没有按预期工作。我已经有了一部分 - 以下打印出我正在追踪的文件列表:
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%
答案 0 :(得分: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!