【问题标题】:Batch file moving files with spaces in their name.批处理文件移动名称中带有空格的文件。
【发布时间】:2012-11-29 08:29:02
【问题描述】:

我希望有人能帮助我,过去几天我一直在 Google 上搜索答案,却一无所获。我有一个两部分代码拳头将所有内容从子文件夹中拉出,然后第二部分按类型将这些文件移动到位于其他位置的其他文件夹中。我可以让代码在测试设置中工作,但它不会在我试图移动的文件上。我认为这与其中包含空格的文件的名称有关,但我不确定。这是代码。谢谢大家!

第一部分

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%

再次感谢。

【问题讨论】:

    标签: file batch-file directory names


    【解决方案1】:

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

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

    更新

    对于for 部分,添加

    "delims=" 
    

    像这样:

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

    【讨论】:

    • 虽然第一部分仍然需要帮助。仍然不会从子文件夹中提取名称中有空格的文件。
    • @IdeaBak:你引用了你的变量DO MOVE "%%i"吗?
    • 您的第 1 部分是否如下所示:FOR /R "C:\Users\Laptop02\Desktop\Folder 1 Test" %%i IN (*.*) DO MOVE "%%i" "C:\Users\Laptop02\Desktop\Folder 1 Test"?每当您使用包含空格的文字字符串时,都需要使用周围的引号来封装空格。
    • @David 它没有,如何将它更改为你所拥有的也没有工作。不过,我感谢您的帮助。
    • @IdeaBak 在运行批处理脚本时是否显示任何错误消息?这通常可以缩小对问题的搜索范围。文件名中是否还有其他特殊字符? "()!&
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      相关资源
      最近更新 更多