当我在批处理变量中有一个 space 时,为什么我会得到三个输出?

Why am I getting three outputs when I have a space in batch variable?

该代码旨在成为 test.tx 文件的简单符号 link 创建者,但是当我 运行 它时,我得到三个输出:

mklink "H:\Backups\Batch Files\Batch" "H:\Backups\Batch Files\File System\test.txt"
mklink "H:\Backups\Batch Files\File" "H:\Backups\Batch Files\File System\test.txt"
mklink "H:\Backups\Batch Files\test.txt" "H:\Backups\Batch Files\File System\test.txt"

脚本:

@Echo off

set "src=H:\Backups\Batch Files\File System\test.txt"
set "des=H:\Backups\Batch Files"

FOR %%A IN (%src%) DO (echo mklink "%des%\%%~nxA" "%src%")

timeout 30

分配给 src 的值是 H:\Backups\Batch Files\File System\test.txt

这是三个单独的 space 分隔字符串,因此 fordo echo 三次,每个字符串一次。

如果您希望cmd将字符串解释为单个实体,您可以

1/ 赋值时引用字符串,set "src="H:\Backups\Batch Files\File System\test.txt""

2/ 使用时引用值FOR %%A IN ("%src%") DO (...