在 Windows .cmd 文件或批处理文件中设置路径中包含空格的路径变量

问题描述 投票:0回答:10

我是剧本写作新手,无法让这个作品发挥作用。如果我将文件移动到其中没有空格的路径,我就可以,但如果可以的话,我希望它能够使用该空格。

我想将一堆 Office 更新提取到包含 .cmd 文件的文件夹中。为了使批处理文件在任何计算机上都可用,我设置了一个路径变量,只需在一个地方更改该变量即可在另一台计算机上运行它。问题是路径中有空格。如果我在定义中的路径周围加上引号,cmd.exe 会在附加文件名和开关之前将它们放在路径周围,并且批处理会失败并显示“命令行语法错误”。如果没有引号,它会失败,并显示“不被识别为内部或外部命令、可操作程序或批处理文件。”

为了进行测试,我正在使用帮助开关,直到或者如果我可以让它工作。我可以使用 8.3 文件/文件夹名称(例如,我的文档为 MyDocu~1)来完成此操作,但可以用不同的方式完成吗?

batch-file path variables cmd space
10个回答
119
投票

尝试这样的事情:

SET MY_PATH=C:\Folder with a space

"%MY_PATH%\MyProgram.exe" /switch1 /switch2

112
投票

我用

set "VAR_NAME=<String With Spaces>"

更新路径时:

set "PATH=%UTIL_DIR%;%PATH%"

36
投票

这里有两个选择。首先,您可以存储不带引号的路径,稍后再引用它:

set MyPath=C:\Program Files\Foo
"%MyPath%\foo with spaces.exe" something

您可以使用的另一个选项是一个子例程,它用于不带引号的字符串(但在这种情况下,这实际上不是一个好主意,因为您添加引号,剥离它们并再次重新添加它们而没有好处):

set MyPath="C:\Program Files\Foo"
call :foo %MyPath%
goto :eof

:foo
"%~1\foo.exe"
goto :eof

%~1
删除参数两边的引号。当传递文件夹名称时,这会很方便,但正如前面所说,在这种特殊情况下,这不是最好的主意:-)


16
投票

试试这个;

  1. 创建一个变量如下

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"**
    
  2. 然后用变量替换路径。确保为开始和结束添加引号

    vstest.console.exe "%SolutionDir%\Automation.Specs.dll"
    

8
投票

创建 .bat 文件时,我总是将路径放在双引号中。 (我刚刚添加了暂停,所以它不会关闭屏幕。)

例如:

"C:\Program Files\PageTech\PCLReader64_131\PCLReader64.exe"
PAUSE

7
投票

正确的做法是这样的:

@ECHO off
SET MY_PATH=M:\Dir\^
With Spaces\Sub Folder^
\Dir\Folder
:: calls M:\Dir\With Spaces\Sub Folder\Dir\Folder\hello.bat
CALL "%MY_PATH%\hello.bat"
pause

5
投票

解决此问题的最简单方法是将文件夹名称放在引号中:

(cd\New Folder\...) --> (cd\"New Folder"\...)

希望这有帮助。


5
投票

我最近也遇到了同样的问题,想象一下......

Folder with spaces
  └  File1.txt
  └  File2.txt

问题

你是对的,如果你在路径周围添加“”...

SET RootFolder="C:\Folder with spaces"

如果您想附加文件名等,它会使其变得不可用(而不对字符串进行一些临时处理...

FOR %%F IN * DO (COPY %%F "%RootFolder%\%%F")

❌ COPY File1.txt ""C:\Folder with spaces"\File1.txt"
❌ COPY File2.txt ""C:\Folder with spaces"\File2.txt"

解决方案

关键是仍然使用“”,但将它们放在整个SET语句周围(即在变量名称之前

SET "RootFolder=C:\Folder with spaces"

当您需要重新使用变量时,这将起作用

FOR %%F IN * DO (COPY %%F "%RootFolder%\%%F")

✅ COPY File1.txt "C:\Folder with spaces\File1.txt"
✅ COPY File1.txt "C:\Folder with spaces\File2.txt"

2
投票

如果需要存储永久路径(cmd重启时路径不改变)

  1. 以管理员身份运行命令提示符(右键单击cmd.exe并选择以管理员身份运行)

  2. 在cmd中

    setx path "%path%;your new path"
    然后输入

  3. 输入path并按回车键检查路径是否正确


2
投票

也可以尝试添加双斜杠 就像这个只适合我

set dir="C:\\\1. Some Folder\\\Some Other Folder\\\Just Because"

@echo on
MKDIR %dir%

天啊,发帖后他们删除了我帖子中的第二个 \,所以如果你打开我的评论,它显示三个,你应该将它们读为两个......

© www.soinside.com 2019 - 2024. All rights reserved.