作者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/cn.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