我有一个问题如何在批处理文件中将多个文件设置为变量?我试图用下面的脚本做一些事情:
move c:\*.gpg q:\
for %%F in ("q:\*.gpg") do (set file=%%~nxF)
if exist q:\*.gpg echo done copying files: %file%
以上仅适用于一个文件。如果有两个以上,它只会回应其中一个。我怎样才能在一行中回显复制的所有文件?
最佳答案
您的代码存在多个问题
for %%F in ("q:\*.gpg") do (set file=%%~nxF)
if exist q:\*.gpg echo done copying files: %file%
首先,您在每个循环中为变量文件分配新值,然后每次都覆盖它而不做任何事情。因此在循环之后 file
将只包含最后一个循环中的值。将 echo
部分移到循环内
另一个问题是变量在默认情况下会在解析时展开。你需要enable delayed expansion并使用 !
而不是 %
使其在运行时扩展
Setlocal EnableDelayedExpansion
for %%F in ("q:\*.gpg") do (
set file=%%~nxF
echo done copying file: !file!
)
如果你想一次回显所有文件然后设置file
变量来包含文件列表
for %%F in ("q:\*.gpg") do (
set file=!file!, %%~nxF
)
echo done copying files: %file%
文件存在检查是多余的。您可以在移动后检查退出代码,如果文件未移动则退出。
关于batch-file - 将文件名设置为批处理文件中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38915669/