我正在尝试整理一个数据文件夹,并编写了一个批处理文件来处理大量的初步工作(删除空文件夹,删除垃圾文件等),但我在尝试交易时摔倒了使用重复文件夹中的文件。
这是当前情况的一个例子:
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_*)
与MD
和MOVE
命令的各种组合,但到目前为止还没有运气。我也尝试从FOR
语句中调用一个子例程,该子例程将跳回树中的一个级别,创建一个名为Concat的文件夹,返回到Concat_ *并移动.zip文件,但是再次没有运气。
非常感谢任何帮助。
干杯,
皮特
答案 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"
)