将带空格的路径作为参数传递给批处理文件

use*_*739 6 windows command-line-arguments batch-file

在 first.bat 中,我使用

var5=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64\
CALL scripts\vc64.bat %var5%
Run Code Online (Sandbox Code Playgroud)

在scripts\vc64.bat中,我使用

SET var6=%1vcvarsx86_amd64.bat
CALL %var6%
Run Code Online (Sandbox Code Playgroud)

但我得到:'C:\Programvcvarsx86_amd64.bat' is not internal or external command.....错误。

如果分配给 var5 的路径没有空间,那么就可以了。

我尝试了几种引号和 的组合%1vcvarsx86_amd64.bat,但没有变化。

如何使其与带空格的路径一起使用?


更准确地说,假设它是 C:\abc\

In first.bat: 
     SET var6=C:\a b c\  =====>  '"C:\avcvarsx86_amd64.bat"' is not.....`
     SET var6="C:\a b c\" ====>   There should not be a b
     SET var6=C:\a\ b\ c\ ====>    Can't find the specified path
     SET var6=C:\a b c\ + Using "%var6" ====> There should not be a b
Run Code Online (Sandbox Code Playgroud)

更新:这是一个例子。将 ab 更改为 ab 有效。

C:\ 中的 call.bat

@ECHO OFF

SET var5=C:\a b\
CALL C:\1.bat "%var5%"

pause
Run Code Online (Sandbox Code Playgroud)

1.bat 在 C:\

@ECHO OFF

SET var6=%~1Test.bat
CALL %var6%

RMDIR /S C:\NoWorry
Run Code Online (Sandbox Code Playgroud)

C:\ab 中的 Test.bat C:\ab 中的 Test.bat

@ECHO OFF

RMDIR /S C:\ThereIsNoSuchFolder
Run Code Online (Sandbox Code Playgroud)

Bal*_*i C 8

要传递带空格的参数,您需要引用参数,然后您可以使用%~1.

所以完整的脚本看起来像

SET var5=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64\
CALL scripts\vc64.bat "%var5%"

SET var6=%~1vcvarsx86_amd64.bat
CALL %var6%
Run Code Online (Sandbox Code Playgroud)