我有一些文件夹包含至少一个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文件复制到父目录。我怎样才能完成这项任务?
答案 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%"