如何复制具有特定模式的文件?

时间:2014-10-28 11:39:06

标签: batch-file

我有一些文件夹包含至少一个zip文件。但是也可能有更多的zip文件。文件夹看起来像这样:

parent
|
+--X7G000738512
|  |
|  `--X7G000738512_20141028_1210.zip
|
+--X7G000843295
|  |
|  +--X7G000843295_20141028_1210.zip
|  |
|  `--X7G000843295_20141028_1210_OLD.zip
|
+--X7G000482756
|  |
|  +--X7G000482756_20141028_1210.zip
|  |
|  `--X7G000482756_20141028_1210_ungueltig.zip
|
`--X7G000285672
   |
   +--X7G000285672_20141028_1210.zip
   |
   +--X7G000285672_20141028_1210_OLD.zip
   |
   `--X7G000285672_20141028_1210_ungueltig.zip

现在我想将不以“_OLD”或“_ungueltig”结尾的zip文件复制到父目录。我怎样才能完成这项任务?

1 个答案:

答案 0 :(得分:1)

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "target=c:\somewhere\parent"

    for /f "delims=" %%a in ('
        dir /s /b /a-d "%target%\*.zip"
        ^| findstr /r /i /c:"%target:\=\\%\\[^\\]*\\.*"
        ^| findstr /l /v /i /e /c:"_OLD.zip" /c:"_ungueltig.zip"
    ') do for %%b in ("%%~dpa\..") do (
        copy "%%~a" "%%~fb"
    )

这使用dir命令检索zip文件的完整列表,该文件使用findstr进行过滤,仅处理子目录下的文件(不处理目标文件夹中的文件),以及其余列表被过滤以仅处理不包含指示字符串的文件。 for %%a命令处理此文件列表,并为每个文件执行copy命令。

我不确定问题中的parent,因此,在此代码中,parent是根据存储.zip文件的文件夹确定的。这是for %%b确定复制文件的位置的原因。

如果parent文件夹是%target%文件夹,请删除最后一个for并使用

....
    ^| findstr /l /v /i /e /c:"_OLD.zip" /c:"_ungueltig.zip"
') do copy "%%~a" "%target%"