Board logo

标题: [文件操作] cmd执行bat文件,文件名以及参数都带空格怎么处理? [打印本页]

作者: lu.zhao    时间: 2017-5-31 11:15     标题: cmd执行bat文件,文件名以及参数都带空格怎么处理?

我写了一个脚本文件,是为了删除一个特定的文件,代码如下:
  1. @echo off
  2. set a=%1
  3. del %a%\"a b a.txt"
复制代码
我打开cmd后的执行的命令如下:
  1. cmd /C  "f:\a b c d\aa bb cc.bat" "f:\cd adb a\aa bb"
复制代码
由于路径中都带有空格所以我都加上了引号。但是执行后显示:
'f:\a' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

求教各位大神这个如何处理?
作者: lu.zhao    时间: 2017-5-31 11:49

有没有了解这个是什么原因造成的啊?亲人们。感觉我加的引号貌似么有起作用,在执行的时候只读取到了
f:\a这个参数,空格后面的被当成独立的个体来对待了。
作者: 老刘1号    时间: 2017-5-31 12:12

DEL /F "%~1\a b a.txt"
作者: 老刘1号    时间: 2017-5-31 12:14

CMD /C  CALL "f:\a b c d\aa bb cc.bat" "f:\cd adb a\aa bb"
作者: 老刘1号    时间: 2017-5-31 12:18

C:\Documents and Settings\Administrator>cmd/?
启动 Windows 命令解释程序一个新的实例

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
    [[/S] [/C | /K] string]

/C      执行字符串指定的命令然后中止
/K      执行字符串指定的命令但保留
/S      在 /C 或 /K 后修改字符串处理(见下)
/Q      关闭回显
/D      从注册表中停用执行 AutoRun 命令(见下)
/A      使向内部管道或文件命令的输出成为 ANSI
/U      使向内部管道或文件命令的输出成为 Unicode
/T:fg   设置前景/背景颜色(详细信息,请见 COLOR /?)
/E:ON   启用命令扩展(见下)
/E:OFF  停用命令扩展(见下)
/F:ON   启用文件和目录名称完成字符(见下)
/F:OFF  停用文件和目录名称完成字符(见下)
/V:ON   将 ! 作为定界符启动延缓环境变量扩展。如: /V:ON 会
        允许 !var! 在执行时允许 !var! 扩展变量 var。var 语法
        在输入时扩展变量,这与在一个 FOR 循环内不同。
/V:OFF  停用延迟环境扩展。

请注意,如果字符串有引号,可以接受用命令分隔符 '&&' 隔开
的多个命令。并且,由于兼容原因,/X 与 /E:ON 相同,/Y 与
/E:OFF 相同,并且 /R 与 /C 相同。忽略任何其他命令行开关。

如果指定了 /C 或 /K,命令行开关后的命令行其余部分将作为命令行处
理;在这种情况下,会使用下列逻辑处理引号字符("):

    1.  如果符合下列所有条件,那么在命令行上的引号字符将被
        保留:

        - 不带 /S 命令行开关
        - 整整两个引号字符
        - 在两个引号字符之间没有特殊字符,特殊字符为下列中的
          一个: <>()@^|
        - 在两个引号字符之间有至少一个空白字符
        - 在两个引号字符之间有至少一个可执行文件的名称。

    2.  否则,老办法是,看第一个字符是否是一个引号字符,如果
        是,舍去开头的字符并删除命令行上的最后一个引号字符,
        保留最后一个引号字符之后的文字。
作者: 0000    时间: 2017-5-31 20:05

本帖最后由 0000 于 2017-5-31 20:06 编辑

cmd /s /c ""f:\a b c d\aa bb cc.bat" "f:\cd adb a\aa bb""




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2