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

时间:2009-12-05 03:08:33

标签: batch-file path variables cmd space

我是脚本编写的新手,无法让这个工作。如果我将文件移动到没有空格的路径,我可以,但我希望它能够与空间一起工作。

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

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

10 个答案:

答案 0 :(得分:90)

尝试这样的事情:

SET MY_PATH=C:\Folder with a space

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

答案 1 :(得分:53)

我用

set "VAR_NAME=<String With Spaces>"

更新路径时:

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

答案 2 :(得分:31)

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

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删除参数周围的引号。这在引用文件夹名称时会派上用场,但如前所述,在这种特殊情况下,这不是最好的主意: - )

答案 3 :(得分:15)

试试这个;

  1. 创建一个变量,如下所示

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

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

答案 4 :(得分:7)

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

例如:

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

答案 5 :(得分:6)

这样做的正确方法是这样的:

@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

答案 6 :(得分:4)

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

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

希望这会有所帮助。

答案 7 :(得分:1)

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

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

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

  3. 输入路径并按Enter

  4. ,检查路径是否正确

答案 8 :(得分:1)

也可以尝试添加双斜杠 这样只能对我有用

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

@echo on MKDIR%dir%

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

答案 9 :(得分:0)

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

Folder
  └  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 语句(即BEFORE变量名)

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"