【问题标题】:Windows batch copy files from subfolders to one folderWindows 将文件从子文件夹批量复制到一个文件夹
【发布时间】:2024-01-24 01:41:01
【问题描述】:

我曾尝试制作将位于 D:\images(此处为随机命名的子文件夹)中的所有 *.tif 文件复制到 d:\all 的批处理脚本。

xcopy D:\Downloads\*.TIF D:\temp\ /s

有效,但它与所有文件夹树一起复制。我尝试使用其他键,但它不起作用。 感谢您的帮助!

【问题讨论】:

    标签: windows batch-file copy xcopy


    【解决方案1】:

    FOR 是你的朋友。在/R 选项和%~nx 变量替换上阅读HELP FOR;然后试试这个非常简单的代码。

       pushd d:\downloads
       for /r %%a in (*.tif) do (
         echo COPY "%%a" "d:\temp\%%~nxa"
       )
       popd
    

    仔细观察结果,然后删除ECHO 命令。

    您必须改进代码以应对错误、重复名称、边缘情况、带有保留字符的名称、竞争条件、宇宙事件...

    【讨论】:

    • 用逗号分隔文件模式!制作一个 .bat 并将 d:\downloads 替换为 %1 并将 d:\temp\%%~nxa 替换为 %2。然后你会有一个可重用的命令,我把我的 Dropbox\bin 放到 PATH 中,这样我就可以在我所有的电脑上使用它了。很棒的蝙蝠脚本,谢谢!
    • 自动覆盖而不是要求每个广告/y复制命令。
    • 嘿嘿,特别对付cosmic events ;)
    【解决方案2】:

    使用 Windows 文件资源管理器搜索的文件,例如*.gif ,我在搜索窗口中获取文件,使用 Edit=>Select All ,复制然后粘贴到所需的文件夹。这将所有子目录中的所有 gif 文件复制到单个文件夹。 对于大量文件,它有时会挂起/没有响应,但其他情况下工作正常。

    【讨论】:

    • 这实际上是一种非常简单的方法! :)
    【解决方案3】:
    pushd D:\Source
       for /r %%a in (*.?*) do (
           MOVE "%%a" "D:\Destination folder\%%~nxa"
       )
    popd
    

    【讨论】:

    • 这将从子文件夹中取出所有文件并将它们移动到目标文件夹,您也可以将移动更改为复制
    【解决方案4】:

    您也可以使用 XXCOPY 免费软件。像 XCOPY 一样工作,但是当您使用 /SG 参数时,它会展平子目录。看看如何使用它here

    【讨论】: