批量将文件移出随机命名的子文件夹

Batch to move files outside of randomly-named subfolders

我有一个数据集,其中包含根据以下分层 folder/subfolder 结构组织的文件:

我想删除所有令人讨厌的子文件夹(将其内容移到同一层级之外 + 删除令人讨厌的文件夹),从而得到这样组织的文件:

如何使用批处理文件 运行 从 Windows 7 中的命令提示符实现此目的?我已经尝试了一些带有 %F 和 %%F 的 for 语句,但是 none 起作用了。感谢任何提示。

我相信以下将实现您的目标当且仅当所有子文件夹和文件名都是唯一的。如果有重复,那么一切都会崩溃。

我没有测试过,所以备份and/or先在一次性数据上尝试代码。

您必须修改第一个 PUSHD 命令以指向所有 "person n" 文件夹所在的根目录。

@echo off
pushd "yourRootWherePersonFoldersReside"
for /d %%U in (*) do (
  pushd "%%U"
  for /f "eol=: delims=" %%A in ('dir /b /ad 2^>nul') do (
    for /d %%B in ("%%A\*") do (
      for /d %%C in ("%%B\*") do (
        md "%%~nxC"
        for /d %%D in ("%%C\*") do move "%%D\*" "%%~nxC" >nul 2>nul
      )
    )
    rd /s /q "%%A"
  )
  popd
)
popd

第二个 FOR 循环必须是 FOR /F 而不是 FOR /D,因为 FOR /D 有可能迭代循环开始后添加的文件夹。 FOR /F 会在迭代开始前缓存整个DIR命令的结果,所以保证新创建的文件夹不会干扰。