我有一个问题如何在批处理文件中将多个文件设置为变量?我尝试用下面的脚本做一些事情:
move c:\*.gpg q:\
for %%F in ("q:\*.gpg") do (set file=%%~nxF)
if exist q:\*.gpg echo done copying files: %file%
Run Code Online (Sandbox Code Playgroud)
以上仅适用于一个文件。如果有两个以上,则仅回显其中之一。如何在一行中回显复制的所有文件?
您的代码存在多个问题
for %%F in ("q:\*.gpg") do (set file=%%~nxF)
if exist q:\*.gpg echo done copying files: %file%
Run Code Online (Sandbox Code Playgroud)
首先,您在每个循环中为变量文件分配新值,然后每次都覆盖它而不执行任何操作。因此,循环之后file将仅包含最后一个循环中的值。将零件移动echo到循环内部
另一个问题是变量默认在解析时扩展。您需要启用延迟扩展并使用,!而不是%使其在运行时扩展
Setlocal EnableDelayedExpansion
for %%F in ("q:\*.gpg") do (
set file=%%~nxF
echo done copying file: !file!
)
Run Code Online (Sandbox Code Playgroud)
如果您想一次回显所有文件,请设置变量file以包含文件列表
for %%F in ("q:\*.gpg") do (
set file=!file!, %%~nxF
)
echo done copying files: %file%
Run Code Online (Sandbox Code Playgroud)
文件存在检查是多余的。您可以在移动后检查退出代码,如果文件未移动则退出。