批处理文件移动文件名称中包含空格的文件。

时间:2012-12-11 18:21:29

标签: file batch-file directory names

我希望有些人可以帮助我,我花了最近几天在谷歌寻找答案而不是在任何地方。我有一个两部分代码拳头从子文件夹中拉出所有内容,然后第二部分按类型将这些文件移动到其他位置的其他文件夹中。我可以让代码在测试设置中工作,但它不会在我试图移动的文件上。我认为它与包含空格的文件的名称有关,但我不确定。这是代码。谢谢你们!

第一部分

FOR /R C:\Users\Laptop02\Desktop\Folder 1 Test  %%i IN (*.*) DO MOVE %%i C:\Users\Laptop02\Desktop\Folder 1 Test

第二部分

@echooff
set media=C:\Users\Laptop02\Desktop\Foder 2 Test
set jpg=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata
set xml=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata

move %dlDir%*.avi %media%
move %dlDir%*/*.avi %meia%
move %dlDir%*.mp4 %media%
move %dlDir%*/*.mp4 %media%
move %dlDir%*.mkv %media%
move %dlDir%*/*.mkv %media%
move %dlDir%*.jpg %jpg%
move %dlDir%**.xml %xml%

再次感谢。

2 个答案:

答案 0 :(得分:3)

您需要在名称中可能包含空格的文件周围放置引号,例如

move "%dlDir%*.avi" "%media%"

<强>更新

对于for部分,请添加

"delims=" 
像这样:

FOR /F "delims=" IN (dir /b /s "C:\Users\Laptop02\Desktop\Folder 1 Test")

答案 1 :(得分:2)

虽然移动命令很好并且上面的方法有效,但是使用以下robocopy命令并使用多线程支持复制或移动多个文件应该更快:

@echo off
set "source=C:\Users\Laptop02\Desktop\Folder 1 Test"
set "media=C:\Users\Laptop02\Desktop\Foder 2 Test"
set "jpg=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata"
set "xml=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata"
robocopy /s /mov /mt "%source%" "%media%" *.avi
robocopy /s /mov /mt "%source%" "%media%" *.mp4
robocopy /s /mov /mt "%source%" "%media%" *.mkv
robocopy /s /mov /mt "%source%" "%jpg%" *.jpg
robocopy /s /mov /mt "%source%" "%xml%" *.xml
pause

或者,只移动一次文件也会更快:

@echo off
set "source=C:\Users\Laptop02\Desktop\Folder 1 Test"
set "media=C:\Users\Laptop02\Desktop\Foder 2 Test"
set "jpg=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata"
set "xml=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata"

cd "%source%"
for /r "%~dp0" %%A in (*) do (
    if "%%~xA"==".avi" move "%%~A" "%media%\"
    if "%%~xA"==".mp4" move "%%~A" "%media%\"
    if "%%~xA"==".mkv" move "%%~A" "%media%\"
    if "%%~xA"==".jpg" move "%%~A" "%jpg%\"
    if "%%~xA"==".xml" move "%%~A" "%xml%\"
)
pause