mar*_*son 101 variables cmd space path batch-file
我是脚本编写的新手,无法让这个工作.如果我将文件移动到没有空格的路径,我可以,但我希望它能够与空间一起工作.
我想从一个带有.cmd文件的文件夹中提取一堆Office更新.为了使批处理文件在任何计算机上都可用,我设置了一个路径变量,我只需要在一个地方更改它就可以在另一台机器上运行它.问题是路径中有一个空格.如果我在定义中的路径周围放置引号,cmd.exe会在它附加文件名和开关之前将它们放在路径周围,并且批处理失败并显示"命令行语法错误".没有引号,它失败,"不被识别为内部或外部命令,可操作程序或批处理文件."
为了测试,我正在使用帮助开关,直到或者如果我可以使它工作.我可以使用8.3文件/文件夹名称(例如我的文档作为MyDocu~1)来完成它,但它可以以不同的方式完成吗?
aph*_*ria 93
尝试这样的事情:
SET MY_PATH=C:\Folder with a space
"%MY_PATH%\MyProgram.exe" /switch1 /switch2
Run Code Online (Sandbox Code Playgroud)
小智 63
我用
set "VAR_NAME=<String With Spaces>"
Run Code Online (Sandbox Code Playgroud)
更新路径时:
set "PATH=%UTIL_DIR%;%PATH%"
Run Code Online (Sandbox Code Playgroud)
Joe*_*oey 31
这里有两个选择.首先,您可以存储未加引号的路径,稍后再引用它:
set MyPath=C:\Program Files\Foo
"%MyPath%\foo with spaces.exe" something
Run Code Online (Sandbox Code Playgroud)
你可以使用的另一个选项是一个子程序,它可以用于取消引用字符串(但在这种情况下,它实际上不是一个好主意,因为你要添加引号,将它们剥离并重新添加它们而没有任何好处):
set MyPath="C:\Program Files\Foo"
call :foo %MyPath%
goto :eof
:foo
"%~1\foo.exe"
goto :eof
Run Code Online (Sandbox Code Playgroud)
该%~1参数两边删除引号.当引用文件夹名称时,这会派上用场,但如前所述,在这种特殊情况下,这不是最好的主意:-)
小智 15
试试这个;
创建一个变量如下
SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"**
Run Code Online (Sandbox Code Playgroud)然后用变量替换路径.确保为开始和结束添加引号
vstest.console.exe "%SolutionDir%\Automation.Specs.dll"
Run Code Online (Sandbox Code Playgroud)在创建.bat文件时,我总是将路径放在双引号中.(我刚刚添加了PAUSE,因此它不会关闭屏幕.)
例如:
"C:\Program Files\PageTech\PCLReader64_131\PCLReader64.exe"
PAUSE
Run Code Online (Sandbox Code Playgroud)
正确的方法是这样的:
@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
Run Code Online (Sandbox Code Playgroud)
我最近也遇到了同样的问题,想象一下......
\nFolder\n \xe2\x94\x94 File1.txt\n \xe2\x94\x94 File2.txt\nRun Code Online (Sandbox Code Playgroud)\n你是对的,如果你在路径周围添加“”......
\nSET RootFolder="C:\\Folder with spaces"\nRun Code Online (Sandbox Code Playgroud)\n如果您想附加文件名等(而不对字符串进行一些临时处理),它就会使其无法使用...
\nFOR %%F IN * DO (COPY %%F "%RootFolder%\\%%F")\n\n\xe2\x9d\x8c COPY File1.txt ""C:\\Folder with spaces"\\File1.txt"\n\xe2\x9d\x8c COPY File2.txt ""C:\\Folder with spaces"\\File2.txt"\nRun Code Online (Sandbox Code Playgroud)\n关键是仍然使用“”,但将它们放在 整个 SET 语句周围(即变量名称之前)
\nSET "RootFolder=C:\\Folder with spaces"\nRun Code Online (Sandbox Code Playgroud)\n当您需要重新使用变量时,这将起作用
\nFOR %%F IN * DO (COPY %%F "%RootFolder%\\%%F")\n\n\xe2\x9c\x85 COPY File1.txt "C:\\Folder with spaces\\File1.txt"\n\xe2\x9c\x85 COPY File1.txt "C:\\Folder with spaces\\File2.txt"\nRun Code Online (Sandbox Code Playgroud)\n