2016-12-29 70 views
0

我必須根據以下層級的文件夾/子文件夾結構組織的數據集,包括文件之外的文件:批量移動隨機命名的子文件夾

enter image description here

我想刪除所有滋擾子文件夾(移動它的內容是外面在同一層級+刪除令人討厭的文件夾),從而結束了這樣的組織的文件: enter image description here

我怎樣才能做到這一點,使用批處理文件,從命令提示符下運行在Windows 7中?我已經嘗試了一些for%F和%% F的語句,但都沒有工作。感謝任何提示。

+1

沒有任何提示如何區分滋擾和有用既不文件也沒有文件夾這個任務是無法解決的。 – LotPings

+2

您的目標有潛在的主要問題。當您嘗試將它們移動到「人物n」級別時,曾祖父文件夾名稱可能會發生衝突。如果每個有用的文件夾可能有多個子文件夾,則可能會遇到與文件名相同的問題。 – dbenham

+0

@LotPings對不起,如果我不清楚。我試圖在層次結構中指出哪些子文件夾是討厭的文件夾。這些是位於父級文件夾下的兩個子文件夾;和立即包含有用文件的子文件夾。 – z8080

回答

2

我相信以下將實現你的目標當且僅當所有子文件夾和文件名是唯一。如果有重複,那麼所有的地獄都會崩潰。

我還沒有測試過,所以先備份和/或嘗試一次性數據上的代碼。

您必須修改第一個PUSHD命令以指向所有「人員n」文件夾所在的根目錄。

@echo off 
pushd "yourRootWherePersonFoldersReside" 
for /d %%U in (*) do (
    pushd "%%U" 
    for /f "eol=: delims=" %%A in ('dir /b /ad 2^>nul') do (
    for /d %%B in ("%%A\*") do (
     for /d %%C in ("%%B\*") do (
     md "%%~nxC" 
     for /d %%D in ("%%C\*") do move "%%D\*" "%%~nxC" >nul 2>nul 
    ) 
    ) 
    rd /s /q "%%A" 
) 
    popd 
) 
popd 

FOR循環的第二必須是FOR/F,而不是FOR/d,因爲/ d具有迭代循環開始後已添加的文件夾的潛力。 FOR/F會在迭代開始之前緩存DIR命令的全部結果,所以新創建的文件夾可以保證不會發生干擾。

+0

謝謝。這與實現目標非常接近。唯一的問題是,文件被移動到應該實際包含它們的文件夾(我稱爲「N的有用文件夾x」)的相同級別。像這樣:https://snag.gy/HFawxS.jpg – z8080

+0

呵呵,實際上我意識到這些有用的文件夾名稱(即時包含文件的名稱)實際上在人員中是相同的。但是這不應該是一個問題,因爲它們中的每一個都駐留在該人員的文件夾中。 – z8080

+0

不幸的是,我完全無法使用這種腳本語言,因此無法對代碼進行可能的微小改變,從而改變了行爲。或者如果它更容易,也許你可以在代碼中添加一些簡短的註釋,這樣我就可以自己調試它。再次感謝你的幫助! – z8080