如何将环境变量设置为批处理文件中带空格的值?

Bob*_*der 6 cmd batch-file windows-console

我不知道如何准确描述我正在尝试做什么,但这里是一个示例批处理文件,演示了我无法弄清楚:

我有一个批处理文件.在该批处理文件中,我正在尝试创建一个目录:

Set CopyFrom = %~dp0

if Exist "%ProgramFiles(x86)" (
  Set TargetDir = %ProgramFiles(x86)%\My Directory Name has spaces
)

md %TargetDir%\NewSubFolder
copy %CopyFrom%\SourceFile.zip %TargetDir%\NewSubFolder
Run Code Online (Sandbox Code Playgroud)

我的批处理文件在第4行失败Set TargetDir =...:

\My was unexpected at this time
Run Code Online (Sandbox Code Playgroud)

我假设这是因为我的路径名中有空格.我以为我可以用引号包装我的变量:

Set TargetDir = "%ProgramFiles(x86)%\My Directory Name has spaces"
Run Code Online (Sandbox Code Playgroud)

但是当我到达创建目录的行时,它失败了,因为%TargetDir%现在用引号括起来.md "%TargetDir%"\NewSubFolder

这可以修复,还是我应该写一个VBScript来解决问题?

zda*_*dan 6

只需将表达式放在引号中,如下所示:

C:\>Set "TargetDir=%ProgramFiles%\My Directory Name has spaces"
C:\>echo %TargetDir%
C:\Program Files\My Directory Name has spaces
Run Code Online (Sandbox Code Playgroud)

注意:它会在引号内扩展变量,如果它也有空格,则需要引用它.

现在你可以引用它来执行你的操作:

md "%TargetDir%\NewSubFolder"
Run Code Online (Sandbox Code Playgroud)