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


112

我是脚本编写的新手,无法正常工作。如果可以将文件移动到没有空格的路径,我可以,但是我希望它可以与空格一起使用。

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

为了进行测试,我将使用帮助开关,直到或直到它可以正常工作为止。我可以使用8.3文件/文件夹名称(例如,“我的文档”为MyDocu〜1)来执行此操作,但是可以用其他方法吗?


引号必须包含带有文件名的路径,并且必须跟随命令行参数。您能否提供有关如何创建命令行的更多详细信息?您的确切含义是>如果我在定义中的路径
两边

Answers:


104

尝试这样的事情:

SET MY_PATH=C:\Folder with a space

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

这就是我在记事本中使用“替换”所做的。谢谢。
marcerickson

5
很高兴它有所帮助。如果您赞成并接受您认为对您有帮助的答案,那将是很好的。
Aphoria

74

我用

set "VAR_NAME=<String With Spaces>"

更新路径时:

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

3
这应该是公认的答案。由于某种原因,如果该值具有空格且未加引号,则从if块调用set无效。
凯文

33

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

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参数两边删除引号。在传递引用的文件夹名称时,这很方便,但是,如前所述,在这种情况下,它不是最好的主意:-)


我使用第一种方法,即在记事本中使用“替换”。第二个似乎不必要地复杂。谢谢。
marcerickson 2009年

2
我有一个获取参数的批处理文件。使用set LALA=%~1对我有用。
JCH2k 2015年

第二个方法效果perfeclty当您使用subrutines
robe007

16

试试这个;

  1. 创建如下的变量

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

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

8

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

例如:

"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"\...)

希望这会有所帮助。


2

如果您需要存储永久路径(重新启动cmd时路径未更改)

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

  2. 在cmd中 setx path "%path%;your new path" 输入

  3. 通过键入path并按Enter键检查路径是否正确


1
我认为,问题不在于PATH变量,而在于路径变量。OP显然希望将特定路径存储到变量中,并在批处理脚本中使用该值。
安德烈·M

1

也只需尝试添加双斜杠,这样仅对我有效

set dir =“ C:\\ 1。某些文件夹\\其他文件夹\\只是因为”

MKDIR%dir%上的@echo

OMG发布后,他们在我的帖子中删除了第二个\,因此,如果您打开我的评论并显示三个,则应将它们读为两个……

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.