首页 文章

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

提问于
浏览
88

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

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

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

8 回答

  • 6

    尝试这样的事情:

    SET MY_PATH=C:\Folder with a space
    
    "%MY_PATH%\MyProgram.exe" /switch1 /switch2
    
  • 7

    我用

    set "VAR_NAME=<String With Spaces>"
    

    更新路径时:

    set "PATH=%UTIL_DIR%;%PATH%"
    
  • 45

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

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

  • 87

    试试这个;

    • 创建如下变量
    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"**
    
    • 然后用变量替换路径 . 确保为开始和结束添加引号
    vstest.console.exe "%SolutionDir%\Automation.Specs.dll"
    
  • 14

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

    例如:

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

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

    @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
    
  • 1

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

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

    希望这会有所帮助 .

  • 31

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

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

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

    • 通过键入路径并按Enter键检查路径是否正确

相关问题