V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shamashii
V2EX  ›  编程

关于 windows 下 CMD 命令 FOR 循环批量处理文件时,文件名中含有 1 个及以上空格的问题

  •  
  •   shamashii · 2016-07-05 10:54:30 +08:00 · 4334 次点击
    这是一个创建于 3073 天前的主题,其中的信息可能已经有所发展或是发生改变。
    全相对路径,假设程序 test.exe,用法 test.exe filename.bmp
    对目录下所有 bmp 文件执行上述命令:
    for %a in (*.bmp) do test.exe %a
    问题:
    当文件名含有 1 个或多个空格时,如 file name.bmp ,出错。
    查看原因每次循环运行命令时候*匹配的文件名没有被“”扩进去,程序以空格为界定确定 argv ,上述单条例子变成
    test.exe file name.bmp 所以报错
    直接 cmd 下:
    test.exe ” file name.bmp “ 无问题

    尝试过各种添加、参数并未成功。

    想实现的目的:
    有无办法让 for %a in (*.bmp) do test.exe %a 中的*.bmp 每次匹配到的文件名加到“”中去(试过“*.bmp ”是没用的)

    目前的解决方案:
    forfiles /M *.bmp /C "cmd /c test.exe @file"
    forfiles 命令中的 @file 返回的文件名是含“”的
    6 条回复    2016-08-20 20:02:01 +08:00
    lowzoom
        1
    lowzoom  
       2016-07-05 11:45:09 +08:00   ❤️ 1
    有试过
    for %a in (*.bmp) do test.exe “%a ”
    麽?
    lowzoom
        2
    lowzoom  
       2016-07-05 11:45:57 +08:00
    ```
    for %a in (*.bmp) do test.exe “%a ”
    ```
    测试回复能不能用 mardown
    lowzoom
        3
    lowzoom  
       2016-07-05 11:47:45 +08:00
    @lowzoom 好吧,只能人工说明了,右边双引号前面的空格应去掉,是系统自动加的
    shamashii
        4
    shamashii  
    OP
       2016-07-05 12:04:05 +08:00
    @lowzoom 解决,感谢
    imn1
        5
    imn1  
       2016-07-05 13:00:30 +08:00
    就算 linux ,文件名或路径含有空格也要用引号,这是常识啊
    Izual_Yang
        6
    Izual_Yang  
       2016-08-20 20:02:01 +08:00 via Android
    for 的变量扩展用法,里面有短文件名
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1167 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:02 · PVG 07:02 · LAX 15:02 · JFK 18:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.