2014-11-20 77 views
0

我們當前使用的機器在輸出數據時會生成複雜的文件夾結構,並且希望簡化之後生成的數據的文件夾層次結構。將文件向上移動的批處理文件或腳本X級

在我們當前的環境中,目錄是這樣的:

C:\ Dir01 \ Dir02 \ Dir03 \ Dir4 \ *。*
C:\ Dir01 \ Dir02A \ Dir03 \ Dir4 \ *。*
C:\ Dir01 \ Dir02B \ Dir03 \ Dir4 \ *。*
C:\ Dir01 \ Dir02C \ Dir03 \ Dir4 \ *。*
C:\ Dir01 \ Dir02D \ Dir03 \ Dir4 \ *。*

Dir01文件夾是我們所有樣本數據都被複制的地方

Dir02文件夾是爲每個獨特的樣本創建的,並且每個文件夾都有唯一的名稱。

的Dir03只包含Dir04文件夾

Dir03和Dir04每次通常具有相同的名稱(唯一的命名Dir02內)

Dir04是所有實際數據就在這裏,並都將有一系列的每個樣本內的文件名...即file.001 file.002 file.003

將Dir04數據理想地移動到每個樣本的Dir02文件夾中,然後移動後應刪除Dir03和Dir04文件夾。

我想在移動後在Dir02中進一步分離出特定文件,並在Dir01下創建一個新文件夾(Dir02A)以重定位這些文件。

最後,我想用這樣的目錄結構來結束:

C:\ Dir01 \ Dir02 \ *。*
C:\ Dir01 \ Dir02A \ *。*
C: \ Dir01 \ Dir02B \ *。*
C:\ Dir01 \ Dir02C \ *。*
C:\ Dir01 \ Dir02D \ *。*

一旦完成我有一個批處理文件,使用robocopy複製整個目錄結構,並將非* .dcm文件分隔成新的文件夾,但這仍然留下我複雜的目錄結構。

robocopy.exe "%SourcePath%" "%DestPath%" /s /xf *.dcm

這是我的首要目標......去掉不必要的目錄導航的自己。

===============
回顧:
1)數據Dir01下方產生唯一的文件夾(Dir02,Dir02A,Dir02B ...)
2)執行命令Dir01
3)將數據從每個Dir04子文件夾移動到其父Dir02,Dir02A,Dir02B等文件夾
4)清理(現在爲空)Dir03和Dir04文件夾在每個Dir02,Dir02A,Dir02B等文件夾下
5)運行我的Robocopy批處理文件以移動所有非*。dcm文件到一個新的位置

+0

你想對Dir4文件夾中的重複名稱做什麼? (如果他們只是複製到Dir2他們會衝突,對吧?)。你說「批處理文件或腳本」 - PowerShell腳本是否可以在該機器上使用? – TessellatingHeckler 2014-11-21 00:50:23

+0

我需要將Dir04中的文件移至Dir02並保持文件名不變。這些文件是在我們的數據採集過程中生成的一系列文件,需要在系列文件中進行維護。 我只是建議每個樣本文件夾(Dir02)在其中包含重複的文件夾和文件名稱時,與Dir02級別的其他唯一樣本文件夾進行比較。 當我們在典型的運行中完成數據生成時,我們可以在Dir02級別上有一個到幾百個獨特的數據集。 – RokGoblin 2014-11-21 15:45:13

+0

我粘貼的robocopy命令實際上是在初始移動所有數據後,將該系列中的特定文件移動到另一個位置(不包括* .dcm文件)。 – RokGoblin 2014-11-21 15:53:23

回答

0

你試過類似的東西嗎?

cd /d c:\dir01\dir02 
forfiles /s /m "*.dcm" /c "cmd.exe /c move @path @path\..\.." 
+0

感謝您的建議,但是我將擁有許多獨特的Dir02實例。我目前正在使用拖放的搜索功能來完成此任務。呸! – RokGoblin 2014-11-21 15:58:13

0

此作爲批處理文件應該做的第一部分:

  1. 通過運行每個樣品夾
    1. 爲每一個,例如c:\out\Dir02F移動c:\out\Dir02F\dir03\dir04\*c:\out\Dir02F\*
    2. 取出Dir03和Dir04子

編輯它涵蓋正確的文件夾,當然,也許在最後加了一點打電話給你的Robocopy腳本爲每個文件夾。短暫測試,但先嚐試複製。

for /D %%s in (c:\out\*) do (
    move "%%s\Dir03\Dir04\*" "%%s\" 
    rmdir "%%s\Dir03\Dir04" 
    rmdir "%%s\Dir03" 
) 

編輯註釋:它將處理Dir01中的每個Dir02文件夾。我認爲這可能是重新編寫甚至:

for /D %%s in (d:\t\*) do (
    for /D %%y in (%%s\*) do (
     for /D %%z in (%%y\*) do (
      move "%%z\*" "%%s\" 
     ) 
     rmdir /Q /S %%y 
    ) 
) 

至少在我的快速測試,沒有愛心Dir03和Dir04被稱爲是什麼在起作用。

+0

我會在星期一檢查...謝謝 – RokGoblin 2014-11-21 22:04:52

+0

這是否遞歸地工作通過Dir01中的所有文件夾(「C:\ out \」),還是我需要爲每個Dir02手動運行此文件? Dir03 \ Dir04沒有硬編碼路徑,可以這樣做嗎?我希望它在文件夾名稱更改的情況下很有用,這是一種半常見的情況。 – RokGoblin 2014-11-21 22:12:28

+0

現在進一步看看通配符的「For」命令....感謝您的代碼幫助。我認爲這可能只是做我需要的,或者至少給我一個很好的開始。真棒! – RokGoblin 2014-11-22 02:19:08

相關問題