|
|
发表于 2010-4-5 23:03:49
|
显示全部楼层
绞尽脑汁写了一段代码,能兼容各种情况,唯有一种特殊情况解决不了:当文件的完整路径中存在&而没有空格的时候,无法正确获取文件路径。这可能是cmd窗口在获取or传递参数时的一个bug,有待各位给出合理的解释,并希望有高人能把它解决掉。
代码如下:- @echo off
- md d:\123 2>nul
- set str=%*
- set "str=%str:"=%"
- set "str= %str%"
- call set "str=%%str: %~d1=" "%~d1%%"
- for %%i in ("%str%") do (
- move /y "%%~i" d:\123 2>nul||(
- xcopy /e /s /k /o /q /y "%%~i" "d:\123\%%~nxi\" 2>nul&&rd /q /s "%%~i"
- )
- )
- pause
复制代码 这段代码最难处理的部分是如何获取文件的完整路径,总体思路是:先用 %* 来接收所有文件的完整路径(只带&而不带空格的不能正确接收),赋予变量str,把str中所有的引号去除,并以盘符作为分隔标志,在盘符前加上适当的引号对,最后,放到for语句中,这样,所有的路径最终会被在首尾加上引号对,从而避免for语句无法正确识别路径中的空格、&、括号等特殊字符的现象。
=============================
以上代码还有一种情况无法正确处理:
当文件路径中含有^符号的时候,^将会被直接丢弃。
——20100411补充 |
|