2013-03-25 100 views
0

我的腳本後,能夠做到以下腳本刪除目錄,但保留的文件

我有文件和文件夾內他們大約2000目錄

我要刪除的主文件夾,但保持該文件夾內的所有內容

所以一個文件夾

Folder A/Folder 2/Video 1 
      Image1 
      Image2 

所以
的一個實例,我希望它能夠刪除主要的第一個文件夾,在這種情況下,將'文件夾A'

Folder 2/Video 1 
Image1 
Image2 

希望你能明白我想做什麼,如果不只是問! 乾杯

額外的信息

從這個

C:/folder A/Stuff 
C:/folder B/Stuff 
C:/folder C/Stuff 

對此

C:/stuff 
C:/sfuff 
C:/sfuff 

我只是想這蝙蝠能夠從該文件夾中刪除的文件夾和移動的一切我運行.bat的地方,我也希望能夠在其他驅動器上運行.bat D:/ E;/F; /許多位置

+2

你的標籤看起來有點混亂的勝利,win8的,散裝和bash ..... – Kent 2013-03-25 17:12:17

+0

在Unix平臺上,你可以用'MV做* ../'(從文件夾A)。我不知道Windows的等價物。 – 2013-03-25 17:12:55

+0

不知道爲什麼win8在那裏固定它。 – xencored 2013-03-25 17:14:37

回答

1

如果您在您的磁盤有這樣的結構:

C:\Folder A 
| | Folder 2 
| | | Video 1 
| | | | Image1 
| | | | Image2 

..並執行這些命令:

cd "\Folder A" 
move "Folder 2" .. 

...那麼你會得到這樣的結果:

C:\Folder A 
| Folder 2 
| | Video 1 
| | | Image1 
| | | Image2 

也就是說,它將「文件夾2」向上移動一級,到「文件夾A」的同一級別。如果你想要做同樣的事情裏面「文件夾A」的所有文件夾,然後將其刪除,此批處理文件這樣做:

@echo off 
cd "\Folder A" 
for /F "delims=" %%a in ('dir /B /AD') do (
    move "%%a" .. 
) 
cd .. 
rd "\Folder A" 

這是你想要的嗎?

編輯:新版本中添加的答案新的評論

@echo off 
rem Eliminate all folders present at the same level of the Batch file 
rem and move their contents one level up 
for /F "delims=" %%a in ('dir /B /AD') do (
    cd "%%a" 
    for /F "delims=" %%b in ('dir /B /AD') do (
     move "%%b" .. 
    ) 
    move *.* .. 
    cd .. 
    rd "%%a" 
) 

你必須注意,如果兩個或多個文件夾或文件的東西有相同的名字,他們最初直接置於下方正在被刪除的頂級文件夾,程序將發出錯誤,並且文件夾或文件不會被移動(並且頂級文件夾不會被刪除)。

安東尼

+0

是這樣的,但有很多很多的文件夾,我希望這樣做(約1000)例如http://pastebin.com/9iz1NreL我只是想能夠刪除第一個文件夾(無論我在哪裏運行.bat它會工作(如果這可以做到))乾杯 – xencored 2013-03-26 11:40:13

+0

@xencored:對不起,我想我不明白你想要什麼。您是否想以與上面的「文件夾A」相同的方式處理_several_文件夾?這很容易做到,但在這種情況下,我需要更多的細節:您要處理的所有文件夾在樹中處於同一級別?請編輯上面的問題,按照我在答案中寫的方式插入3或4個示例文件夾,並以同樣的方式向我們展示如何獲得最終結果。 – Aacini 2013-03-26 20:25:59

+0

對不起Aacini對我來說很難解釋,Ive增加了一些更多的信息,正如你所說的那樣希望這更清楚謝謝 – xencored 2013-03-27 02:20:50

0
@ECHO OFF 
SETLOCAL enabledelayedexpansion 
SET "relroot=c:\destdir" 
SET "relrootd=c:\destdir" 
SET "eliminate=folder a" 
XCOPY /t /e "%relroot%\%eliminate%" "%relrootd%" 
FOR /f "delims=" %%i IN ('dir /s /b /a-d "%relroot%\%eliminate%"') DO (
    SET dest=%%i 
    SET dest=!dest:%relroot%\%eliminate%=%relrootd%! 
    ECHO MOVE "%%i" "!dest!" >nul 
) 

這應該做到這一點 - 但它可能不會與具有特殊意義的CMD.EXE^&!%一些poison文件/目錄名字符處理 - 定期alphamerics,符號和空格應該罰款

relroot是來源,relrootd是目的地。如果你喜歡,它們可以相同或不同。我使用了c:\destdir,因爲這是我用於測試批處理文件的目錄。

XCOPY創建適當的空樹。

/b基本模式/s包括子目錄/a-d不含數據夾被處理線由行,原始relroot和目錄-TO-eliminate由目的地relroot更換並且擬議MOVE操作顯示DIR輸出。

驗證後,請刪除ECHO關鍵字以激活移動。

我會檢查你的原始目錄relroot\eliminate的空虛,再取出 - 只是爲了安全起見...

+0

嗨,謝謝!當你說這是source/c:destdir時,我是否必須每次都改變它?文件夾遍佈全國,是我問的原因!再次感謝這個 – xencored 2013-03-25 18:49:30

+0

需要更多信息。此過程應將所有「文件夾A」的內容移至 - 無論您喜歡何處。 'relroot'只是設置爲'Folder A'的父項。 'relrootd'是目的地 - 可以在同一邏輯驅動器上的任何位置(如果它位於不同的驅動器上,則需要'XCOPY'而不是'MOVE')現在如果有許多'Folder A's,那是另一個題。如果你的目標是Folder A的父項,那麼實現起來相對容易,那麼在後續運行中,任何例程如何區分'已經移動'的結構和'now move me'結構? – Magoo 2013-03-25 19:12:09

+0

感謝彼得,我想我只是習慣於使用我擁有的其他蝙蝠,我會將.bat粘貼到我想要製作文件夾的地方並將其打開,無論如何,我在很多隨機的地方都有相當多的文件夾在我使用這個.bat之後的許多硬盤上。我希望能夠做到這一點(如果可以做到的話)。再次感謝彼得。 – xencored 2013-03-25 19:18:41

相關問題