2013-12-18 71 views
1

在其名稱中的模式考慮父文件夾排序文件到文件夾中基於使用的.bat

C:\Users\..\Parent 

在父母有3個文件夾M1,M2,M3

C:\Users\..\Parent\M1 
C:\Users\..\Parent\M2 
C:\Users\..\Parent\M3. 

在M1,M2 ,M3有100個子文件夾。

C:\Users\..\Parent\M1\MattP001M1 
C:\Users\..\Parent\M1\MattP002M1 
so on till 
C:\Users\..\Parent\M1\MattP100M1. 

類似地對於M2,M3也是如此。


在每個文件夾(MattP001M1..MattP100M1)有一噸的.wav文件(接近1500上的平均值)。 這些wav文件在其命名中有一個模式。 例如:有German_09mea4567_morename 20個文件和German_4132azzi_morename等15個文件。 我正在使用此腳本將它們分組在基於(09mea4567)之後的獨特部分的文件夾中。

SETLOCAL ENABLEDELAYEDEXPANSION 
for %%a in (*.wav) do (
set f=%%a 
set g=!f:~7,8! 
md "!g!" 2>nul 
move "%%a" "!g!" 
) 

現在,這是罰款,一個文件夾。我想爲M1(MattP001M1,..,MattP100M1),M2,M3下的所有文件夾執行此操作。

請注意:這是一臺機器上的設置。在另一臺機器上而不是德語上有另一種語言。

希望我讓自己更清楚了。

+0

@foxidrive感謝您的編輯。對不起,現在測試 – Matt

回答

1
@echo off 

    rem Prepare environment 
    setlocal enableextensions disabledelayedexpansion 

    rem configure where to start 
    set "root=c:\somewhere" 

    rem For each file under root that match indicated pattern 
    for /r "%root%" %%f in (*_*_*.wav) do (

     rem Split the file name in tokens using the underscore as delimiter 
     for /f "tokens=2 delims=_" %%p in ("%%~nf") do (

      rem Test if the file is in the correct place 
      for %%d in ("%%~dpf.") do if /i not "%%~p"=="%%~nd" (

       rem if it is not, move it where it should be 
       if not exist "%%~dpf\%%~p" echo md "%%~dpf\%%~p" 
       echo move "%%~ff" "%%~dpf\%%~p" 
      ) 
     ) 
    ) 

目錄創建和文件移動被回顯到控制檯。如果輸出正確,請在mdmove之前刪除echo命令以使其正常工作。

+0

:)謝謝 – Matt

相關問題