我是脚本编写的新手,无法让这个工作。如果我将文件移动到没有空格的路径,我可以,但我希望它能够与空间一起工作。
我想将一堆Office更新提取到包含.cmd文件的文件夹。为了使批处理文件在任何计算机上都可用,我设置了一个路径变量,我只需要在一个地方更改它就可以在另一台机器上运行它。问题是路径中有一个空格。如果我在定义中的路径周围放置引号,cmd.exe会在它附加文件名和开关之前将它们放在路径周围,并且批处理失败并显示“命令行语法错误”。没有引号,它会失败,“不会被识别为内部或外部命令,可操作程序或批处理文件。”
为了进行测试,我正在使用帮助开关,直到或者我可以使用它。我可以使用8.3文件/文件夹名称(例如我的文档作为MyDocu~1)来完成它,但它可以以不同的方式完成吗?
答案 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)
试试这个;
创建一个变量,如下所示
SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"**
然后用变量替换路径。确保为开始和结束添加引号
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时路径未更改)
以管理员身份运行命令提示符(右键单击cmd.exe并选择以管理员身份运行)
在cmd中
setx path "%path%;your new path"
然后输入
输入路径并按Enter
答案 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"