代码之家  ›  专栏  ›  技术社区  ›  esac

如何处理for循环中路径名中的空格?

  •  1
  • esac  · 技术社区  · 14 年前

    正在尝试使用当前脚本的路径,路径中包含空格。但我似乎无法让它发挥作用:

    C:\Test Directory>dir
     Volume in drive C has no label.
     Volume Serial Number is 7486-CEE6
    
     Directory of C:\Test Directory
    
    08/31/2010  07:28 PM    <DIR>          .
    08/31/2010  07:28 PM    <DIR>          ..
    08/31/2010  07:28 PM                20 echoit.cmd
    08/31/2010  07:28 PM                94 test.cmd
                   2 File(s)            114 bytes
                   2 Dir(s)  344,141,197,312 bytes free
    
    C:\Test Directory>type echoit.cmd
    @echo off
    echo %*
    
    C:\Test Directory>type test.cmd
    @echo off
    
    for /f "tokens=*" %%a in ('%~dp0\echoit.cmd Hello World') do (
        echo %%a
    )
    
    C:\Test Directory>test
    'C:\Test' is not recognized as an internal or external command,
    operable program or batch file.
    
    C:\Test Directory>
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   linuxuser27    14 年前

    变化 test.cmd 致:

       @echo off
    
       for /f "tokens=*" %%a in ('"%~dp0\echoit.cmd" Hello World') do (
        echo %%a
       )
    

    您需要用引号设置整个命令,减去参数。当引用整个集合时,Windows命令提示符将单词集合视为单个命令,因此必须排除 Hello World 争论。如果要将其包含在引号中,Windows会将其视为命令的一部分而不是参数。

        2
  •  0
  •   WildCrustacean    14 年前

    你试过加引号吗?

    for /f "tokens=*" %%a in ('"%~dp0\echoit.cmd" Hello World') do (
        echo %%a
    )
    
        3
  •  0
  •   Jason Jong    14 年前

    使用~fs0怎么样,即

    C:\Test Directory>type test.cmd
    @echo off
    
    for /f "tokens=*" %%a in ('%~fs0\echoit.cmd Hello World') do (
     echo %%a
    )
    

    其中%~fsi-将%i扩展为仅包含短名称的完整路径名