batch-file - 将文件名设置为批处理文件中的变量

标签 batch-file

我有一个问题如何在批处理文件中将多个文件设置为变量?我试图用下面的脚本做一些事情:

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/

相关文章:

java - WildFly 独立版无法运行

cmd脚本中的日期算术

batch-file - 如何调用一个又一个批处理文件

windows - 是否可以使用批处理编程在命令提示符上输出当前颜色代码?

batch-file - %%~dpa 的含义?

windows - 如何在cmd中调用嵌套程序

command-line - 如果给定文件或目录被锁定(由任何进程使用),如何检查命令行?

windows - 使用 wget 强制清除缓存

python - 从 Python 2 返回的区别——版本检查和 Python 3

arrays - 多行批量创建数组