同名子目录移动目录

同名子目录移动目录

我陷入了困境,似乎无法找到快速解决这个问题的方法。

我有一个外部硬盘,其文件夹结构如下:

  • \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.lstfolder2\folder2\shopping.lst。在我在一个不重要的目录树中进行的快速测试中,它询问我是否要覆盖(即破坏)目标(上层)文件。正如我所说,为了安全起见,我建议您先备份文件。

相关内容