作者torchbalter (torchwick)
看板EzHotKey
標題[批次] 資料夾與相同名稱的子資料夾移動問題
時間Sat Nov 16 11:51:00 2019
請問如何將資料夾中"相同名稱的子資料夾"裡的內容移動到上一層呢?
假設我有如下的資料夾之結構:
https://i.imgur.com/5BEmEYK.png
也就是在名為"folder1"的資料夾裡面還多一個相同名稱的子資料夾"folder1"
而我希望將第二層的folder1裡的檔案及資料夾移動到第一層folder1裡,並刪除第二層的
folder1資料夾(或是直接刪除第一層的folder1,但我不確定是否可以做到這樣的事情)
也就是我希望變成以下的資料夾之結構:
https://i.imgur.com/PbGyo7n.png
因為這樣的資料夾很多,所以我在思考要怎麼用bat檔做到這件事情,但我其實並不懂bat
檔
目前有在這裡看到類似的做法
https://superuser.com/questions/949136/directory-with-same-name-subdirectory-move
但不曉得為什麼解答的第一個做法
for /d %d in (*) do @echo move %d\%d\* %d
這個我測試執行後沒有任何反應
而第二個做法
for /d %d in (*) do @move %d\%d\* %d
做出來的結果與我預期的不太一樣,在我的例子中會變成如下結果
https://i.imgur.com/F4D654v.png
也就是僅僅只會移動第二層folder1裡面的檔案(即fileA.txt)而不會移動裡面的資料夾(
即folder2)
想請問該如何修改它,或是有沒有更好的做法呢?
----------------------
上面是我的問題,以下是我自己的猜測跟嘗試,以下內容可省略。
因為我其實不懂批次檔的寫法,我猜測是不是 * 這個指令只能抓到檔案而抓不到資料夾
呢?
所以我把上面的做法修改成以下做法,但我不確定語法上這樣是不是正確的。
for /d %%d in (*) do (
move %%d\%%d\* %%d
for /d %%i in (%%d\%%d\*) do move %%i %%d
)
我猜想第三行的部分應該可以將第二層folder1裡面的資料夾取出,再來應該只要刪除已
經空的folder1就沒問題了。
我測試下似乎是沒問題的,但假如說我把folder2的名字改成folder1,它又無法正確執行
了。
雖然幾乎不太會有一個資料夾裡面有三層相同名稱資料夾的情況發生,但我只是好奇如果
這樣的情況下該如何做呢?
我在猜想應該是因為它無法取代已存在的folder1吧,但這樣子的話...難道要用遞迴嗎?
另外我也在想是不是應該用IF ELSE,或是直接將第二層folder1改名,然後再移動到
%~dp0,之後再把它改回來,或許就可以了?
PS 其實我會有這樣的問題是因我在用winrar解壓縮時,都是選"解壓至個別資料夾",經
常會多一層相同名稱的子資料夾,累積下來有不少這樣子的資料夾。不知道在用rar解壓
縮時,有沒有選項可以避免這樣的問題。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.169.109.197 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/EzHotKey/M.1573876262.A.B12.html
※ 編輯: torchbalter (118.169.109.197 臺灣), 11/16/2019 12:05:16
※ 編輯: torchbalter (118.169.109.197 臺灣), 11/16/2019 12:10:07
※ 編輯: torchbalter (118.169.109.197 臺灣), 11/16/2019 12:15:32