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

我刚开始写剧本,这个我写不好。如果我将文件移动到一个没有空格的路径,我可以这样做,但是如果可以的话,我希望它能够使用空格。

我希望将一系列 Office 更新解压缩到一个文件夹中,该文件夹的。Cmd 文件。为了使批处理文件在任何计算机上都可用,我设置了一个路径变量,只需在一个地方更改它,就可以在另一台计算机上运行它。问题是路径中有一个空格。如果我在定义中的路径周围加上引号,cmd.exe 在追加文件名和开关之前就会在路径周围加上引号,这样批处理就会因为“命令行语法错误”而失败如果没有引号,则失败,“不能识别为内部或外部命令、可操作程序或批处理文件”

为了测试,我正在使用帮助开关,直到或如果我可以得到它的工作。我可以使用一个8.3文件/文件夹名称(例如,我的文档是 MyDocu ~ 1) ,但是可以用不同的方法吗?

468780 次浏览

试试这样:

SET MY_PATH=C:\Folder with a space


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

这里有两个选项。首先,您可以存储未引用的路径,并在稍后引用它:

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删除参数周围的引号。这在传递文件夹名称时非常方便,但是,如前所述,在这种特殊情况下,这不是最好的办法: -)

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

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

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

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

当我创建一个。蝙蝠档案。(我刚刚添加了暂停,所以它不会关闭屏幕。)

例如:

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

正确的做法是这样的:

@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

我吸毒

set "VAR_NAME=<String With Spaces>"

更新路径时:

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

试试这个

  1. 创建如下所示的变量

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"**
    
  2. Then replace the path with variable. Make sure to add quotes for starts and end

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

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

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

希望这能帮上忙。

也可以试着加双斜杠 就像这只对我有用一样

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


@echo on
MKDIR %dir%

OMG 发布后,他们删除了第二个在我的帖子,所以如果你打开我的评论,它显示了三个,你应该阅读他们作为两个... ..。

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

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"