我陷入了困境,似乎无法找到快速解决这个问题的方法。
我有一个外部硬盘,其文件夹结构如下:
\folder1
\folder2
\folder3
其中一些有同名的子目录,例如
\folder1
\folder2\folder2
\folder3\folder3
如果可能的话,我很乐意使用批处理,基本上只在一个目录中查找相同的名称,如果匹配,则将所有文件从移动\folder2\folder2
到\folder2
。
为了修复这个问题,我总共需要翻查 640 个文件夹。
我发现此链接这与我想要做的正好相反。我在测试结构上尝试过的所有方法都不起作用。
答案1
首先,如果可能的话,我建议你备份整个目录树,以防万一出现问题。然后,尝试输入命令
for /d %d in (*) do @echo move %d\%d\* %d
这应该输出类似
move folder1\folder1\* folder1
move folder2\folder2\* folder2
move folder3\folder3\* folder3
如果这看起来像一个合理的命令序列,请省略echo
:
for /d %d in (*) do @move %d\%d\* %d
folder1
由于folder1\folder1
不存在,因此将给出错误消息。它还将给出第二级文件夹为空的任何文件夹的错误消息。
如果要抑制第二级文件夹不存在的文件夹的错误消息,请将以下内容放入批处理文件中:
@echo off
for /d %%d in (*) do (
if exist %%d\%%d\nul (
echo move %%d\%%d\* %%d
) else (
echo %%d\%%d doesn't exist.
)
)
或者简单地
@echo off
for /d %%d in (*) do if exist %%d\%%d\nul echo move %%d\%%d\* %%d
(请注意,您必须在命令提示符下直接%%
使用的批处理文件中使用。)%
显然,存在目录及其子目录中存在同名文件的风险,例如folder2\shopping.lst
和folder2\folder2\shopping.lst
。在我在一个不重要的目录树中进行的快速测试中,它询问我是否要覆盖(即破坏)目标(上层)文件。正如我所说,为了安全起见,我建议您先备份文件。