bat复制命令,如何处理名称中带有空格的文件名,例如Track4 (2).rar 。这类情况处理失败。

md x:\bak
:do
set dname=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
set tname=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
set /a dd=dname/1
set /a tt=tname/1
set fname=%dd%%tt%

for /f %%i in ('dir /b *.rar') do (copy %%i "D:\1\%fname%_%%i"&&del "%%i" /q /f)

ping 127.1 -n 18000 >nul
goto :do

原因分析:
批处理命令机制是逐字逐句,一个命令接一个命令,一行接一行
命令或者参数都用空格隔开
带有空格的文件名,会被识别为两个不同的东西,所以会处理失败
处理方法:
带空格的文件名,用半角的双引号括起来,如"Track4 (2).rar ",
具体到你的语句中,就是dir出来的%%i需要用双引号括起来
【copy "%%i" "D:\1\%fname%_%%i"&&del "%%i" /q /f) 】追问

改成这个语句之后,没有用的,出现了闪退的现象。建议你自己试一下

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-05
改一下这行
for /f %%i in ('dir /b *.rar') do (copy "%%i" "D:\1\%fname%_%%i"&&del "%%i" /q /f)追问

提示 copy“Track4”.... 然后找不到文件。还是到空格那里就没读取了

追答

md C:\TMP
:do
set dname=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
set tname=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
set /a dd=dname/1
set /a tt=tname/1
set fname=%dd%%tt%
for /f "delims=" %%i in ('dir /b *.rar') do (copy "%%i" "C:\TMP\%fname%_%%i"&&del "%%i" /q /f)
pause
==========测试通过

本回答被提问者采纳
相似回答