2012-09-15 60 views
1

我有一組約10.000目錄,具有以下結構如何縮短目錄路徑模式

./AAA/AAA/somedirs/file.txt 
.. 
./BCDE/BCDE/somedirs/file.txt 
.. 
./FGMAB/FGMAB/somedirs/file.txt 
.. 
etc 

我希望減少連續兩個目錄的經常性目錄路徑模式具有相同的名稱:

./X/X/etc/ 

與該名稱的單個目錄:

./X/etc/ 

我想這種X/X模式後,發現所有子和他們像移動到X /使用命令:

for /r /d %x in (*/%y/%y/*) do move "%x" ".." 

這不運行,但它似乎並沒有真正做任何事情。

任何人的想法是否以及如何做到這一點?

+0

如果要縮短似乎太長的相對路徑,則必須轉至該路徑以使其成爲當前(即:「。」)。使用'PUSHD','CD'和'POPD'來回移動到特定路徑,以便臨時使用較短的相對路徑。 – Jay

回答

1

假設重複的名字都是在如圖所示的樹結構的頂部,這樣的事情應該工作:

md dummy\x 
for /D %x in (*) do if exist %x\%x cmd /c "move %x dummy\x\%x & move dummy\x\%x\%x %x & rd dummy\x\%x" 

測試它第一次! (並且記住,當命令處於批處理文件時,需要將百分號加倍。)

+0

謝謝,這個作品!對於任何試圖執行相同技巧的人,只要記住你需要在目錄和文件出現時添加額外的引號(如果它們包含空格)。 '「%x \%x」'而不是'%x \%x'。下面的代碼和上面的代碼具有相同的技巧,但是隻需要一行,而不需要虛擬目錄:如果存在%x \%x cmd/c「(for(*)中的for/D%x, 「%x \%x \ *」)會移動「%y」「%x」「&rd」%x /%x「' – planck

+0

不夠公平。但請注意,如果在第二級有任何文件,即'。\ aaa \ aaa \ file.txt',或者有任何重複三次的目錄名稱,即' \ AAA \ AAA \ AAA \ file.txt'。這些是否是潛在的問題取決於情景。 –