129

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

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

对于测试,我使用帮助开关,直到或者如果我可以让它工作。我可以使用 8.3 文件/文件夹名称(例如 My Documents as MyDocu~1)来完成,但可以用不同的方式完成吗?

4

10 回答 10

116

尝试这样的事情:

SET MY_PATH=C:\Folder with a space

"%MY_PATH%\MyProgram.exe" /switch1 /switch2
于 2009-12-05T04:17:57.570 回答
94

我用

set "VAR_NAME=<String With Spaces>"

更新路径时:

set "PATH=%UTIL_DIR%;%PATH%"
于 2013-10-03T12:25:02.683 回答
35

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

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

于 2009-12-06T12:24:59.983 回答
16

尝试这个;

  1. 创建如下变量

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

    vstest.console.exe "%SolutionDir%\Automation.Specs.dll"
    
于 2015-04-15T08:16:21.587 回答
8

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

例如:

"C:\Program Files\PageTech\PCLReader64_131\PCLReader64.exe"
PAUSE
于 2013-04-09T22:34:35.683 回答
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
于 2013-04-10T02:06:56.163 回答
5

The easiest way to fix this problem is to put the folder name in quotes:

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

Hopes this helps.

于 2015-11-05T08:18:39.420 回答
2

If you need to store permanent path (path is not changed when cmd is restart)

  1. Run the Command Prompt as administrator (Right click on cmd.exe and select run as administrator)

  2. In cmd setx path "%path%;your new path" then enter

  3. Check whether the path is taken correctly by typing path and pressing enter

于 2011-07-02T14:33:59.883 回答
2

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

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 语句周围(即在变量名之前)

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"
于 2021-05-15T02:17:25.250 回答
1

也只是尝试添加这样的双斜杠只对我有用

set dir="C:\\1. 一些文件夹\\一些其他文件夹\\只是因为"

@echo 在 MKDIR %dir%

OMG 在发布后他们删除了我帖子中的第二个 \ 所以如果你打开我的评论并且它显示三个你应该把它们读成两个......

于 2020-04-29T16:20:35.803 回答