批处理文件用通配符重命名文件夹或创建新文件夹并移动内容?

时间:2013-08-06 12:32:58

标签: batch-file cmd wildcard batch-processing

我正在尝试整理一个数据文件夹,并编写了一个批处理文件来处理大量的初步工作(删除空文件夹,删除垃圾文件等),但我在尝试交易时摔倒了使用重复文件夹中的文件。

这是当前情况的一个例子:

w:\Data\Corporations\555\20130101\Concat_000001\555_20130101_data.zip
w:\Data\Corporations\555\20130101\Concat_000002\555_20130101_data.zip
w:\Data\Corporations\555\20130101\Concat_000003\555_20130101_data.zip
w:\Data\Corporations\555\20130101\Concat_000004\555_20130101_data.zip

每个YYYYMMDD文件夹应该只有一个Concat文件夹,应该如下所示:

w:\Data\Corporations\555\20130101\Concat\555_20130101_data.zip

要处理的w:\ Data \ Corporations中有数百个文件夹,所以我想首先要找到任何名为Concat_ *的文件夹,在同一个父文件夹中创建一个名为Concat的文件夹,然后移动任何文件夹从Concat _ 压缩到Concat。

我尝试了FOR /D in (Concat_*)MDMOVE命令的各种组合,但到目前为止还没有运气。我也尝试从FOR语句中调用一个子例程,该子例程将跳回树中的一个级别,创建一个名为Concat的文件夹,返回到Concat_ *并移动.zip文件,但是再次没有运气。

非常感谢任何帮助。

干杯,

皮特

2 个答案:

答案 0 :(得分:2)

试试这个:

for /r "w:\Data\Corporations\555" %%a in (*.zip) do for %%b in ("%%~dpa.") do md "%%~dpbConcat" 2>nul & move /y "%%~fa" "%%~dpbConcat"

答案 1 :(得分:1)

以下是你提出的问题。如果取消注释最后一行,则将删除空的config_ *文件夹。将保留非空的config_ *文件夹。

@echo off
for /f "delims=" %%F in ('dir /b /ad /s concat_*') do (
  if not exist "%%~dpFconcat\" mkdir "%%~dpFconcat\"
  if exist "%%F\*.zip" move /y "%%F\*.zip" "%%~dpFconcat\" >nul
  REM uncomment line below if you want to remove empty concat_* folders
  REM dir /b "%%F"|findstr "^" >nul || rd "%%F"
)