如何搜索具有特定命名约定的文件夹并将它们与其内容一起复制到不同的位置?

时间:2016-08-08 15:19:58

标签: batch-file cmd

我有一个目录F:\Input,里面有各种子文件夹。

我需要专门复制那些具有相同命名约定的文件夹,例如India012345.zipIndia09876.zip等。这些文件夹的文件夹名称不是.zip,而不是ZIP文件!

我需要将这些文件夹及其内容(子文件夹和文件)复制到其他位置。

CD /D F:\Input\
FOR /f "tokens=*" %%I in ('dir /s /b /a:d "India*"') do echo|xcopy "%%I" "E:\output\" /s

这是我目前的代码,它复制内容但不复制主文件夹India012345.zip

F:\Input的文件夹结构:

  • 国家
    • 状态
      • 0021
        • 操作1
          • QWERTY
            • India09876.zip (文件夹,未压缩)
              • 31君-2016
                • XML和PDF文件
                • vcxz
                  • 03-Aug-2016.zip (文件,压缩)
      • 0031
        • 操作1
          • India1234.zip (文件夹,未压缩)
            • 31君-2016
              • XML和PDF文件
              • vcxz
                • 04-Aug-2016.zip (文件,压缩)

India*.zip在字数方面将是唯一的。

无法重命名。请提供如下复制解决方案:

文件夹E:\Output应包含批量执行后:

  • India09876.zip
    • 31君-2016
      • XML和PDF文件
      • vcxz
        • 03-Aug-2016.zip
  • India1234.zip
    • 31君-2016
      • XML和PDF文件
      • vcxz
        • 04-Aug-2016.zip

1 个答案:

答案 0 :(得分:0)

还必须在目标路径中指定India*.zip目录名称,并且还应使用命令 XCOPY 的更多选项,如/I来自动创建目标文件夹。

@echo off
for /F "delims=" %%I in ('dir "F:\Input\India*.zip" /A:D /B /S 2^>nul') do xcopy "%%I" "E:\Output\%%~nxI\" /C /H /I /K /Q /R /S /Y >nul

使用以下方法从复制过程中删除文件夹名称中的异常.zip非常容易:

@echo off
for /F "delims=" %%I in ('dir "F:\Input\India*.zip" /A:D /B /S 2^>nul') do xcopy "%%I" "E:\Output\%%~nI\" /C /H /I /K /Q /R /S /Y >nul
使用

%%~nI代替%%~nxI来摆脱"文件扩展名"来自文件夹名称。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • dir /?
  • echo /?
  • for /?
  • xcopy /?

另请阅读Microsoft有关Using command redirection operators的文章,了解>nul的解释。

2^>nul2>nul,重定向操作符>使用^进行转义,以便在执行命令 DIR 时应用2>nul而非在解析 FOR 命令行时解释重定向,这会因语法错误而导致批处理退出。

用于执行 DIR

2>nul会将 DIR 输出的可能错误消息重定向到 STDERR 到设备 NUL 来压制它。如果命令 DIR 无法找到与文件夹名称通配符模式File not found匹配的任何文件夹,则会将混淆错误消息India*.zip输出到标准错误流。