本帖最后由 CrLf 于 2011-8-17 10:47 编辑
回复 4# zcop20
for /f 从命令获取输入时有个特性,当发现参数首尾都存在双引号时,会自动把它去掉再执行,所以那句可以改成:- for /f %%a in ('@"%~dp0md5.exe" "D:\新建文件夹 ^(3^)\文件A.rar"') do set md5a=%%a
- ::用 @ 避免以双引号打头,而又符合语法,这应该是最优方案
复制代码 当然还有其他方案,不过都有明显缺点:- for /f %%a in ('^>con "%~dp0md5.exe" "D:\新建文件夹 ^(3^)\文件A.rar"') do set md5a=%%a
- ::同样的原理,只是这里改用重定向,缺点是不够简洁
复制代码
- for /f %%a in ('""%~dp0md5.exe" "D:\新建文件夹 ^(3^)\文件A.rar""') do set md5a=%%a
- ::多给一对双引号,不过这样一来反括号就跑到引号对之外了,需要另行转义
复制代码 或者- for /f %%a in ('call "%~dp0md5.exe" "D:\新建文件夹 ^(3^)\文件A.rar"') do set md5a=%%a
- ::因为此处使用了 call 来,效率会降低至少三分之一
复制代码
- "%~dp0md5.exe" "D:\新建文件夹 (3)\文件A.rar"|for /f %%a in ('more') do set md5a=%%a
- ::缺点和 call 一样,用时至少多一半
复制代码 再或者- for /f %%a in ('%~dps0md5.exe "D:\新建文件夹 (3)\文件A.rar"') do set md5a=%%a
- ::使用短名,避免绝对路径中存在空格的情况,但是若存在特殊字符 ) 将导致for命令出错,而若存在 &,后果不堪设想
复制代码
|