【问题标题】:Batch file to move all subfolder files up then delete empty subfolders?批处理文件向上移动所有子文件夹文件然后删除空子文件夹?
【发布时间】:2014-02-10 08:59:27
【问题描述】:

我有一个文件夹,其中包含许多子文件夹,每个子文件夹中都有不同的文件:

C:/folder/subfolder1/file1.jpg,
C:/folder/subfolder2/file2.jpg,
C:/folder/subfolder3/file3.jpg, 
etc.

如何创建一个批处理文件,将子文件夹中的文件移动到文件夹中,然后删除空的子文件夹。

即。 bat文件运行后,文件夹结构应该如下:

C:/folder/file1.jpg
C:/folder/file2.jpg
C:/folder/file3.jpg 
etc.

【问题讨论】:

  • 您的问题应包含一些您已尝试回答的证据。请包括您已经尝试过的任何内容。

标签: batch-file command-line


【解决方案1】:

试试这个

@echo off
for /f "tokens=*" %%f in ('dir /a:-D /s /b') do move "%%f" .
for /f "tokens=*" %%f in ('dir /a:D /s /b') do rd "%%f"

【讨论】:

  • 如果存在名称冲突,如何自动重命名移动的文件?即文件1,文件1(1)
  • 重命名文件,而不是覆盖。 :)
  • 这行得通,但它相当危险,它一直遍历文件夹树。如果您有带有更多子文件夹的子文件夹(如音乐专辑),它会将所有文件转储到父目录中。只是一个警告!
  • 大家好...我使用了这些命令和 /Y 参数,但文件似乎仍然被覆盖
  • 首先它不起作用,所以我在最后添加了暂停以查看发生了什么。发现我的文件没有被移动 n 说访问被拒绝。尝试以管理员身份运行,但蝙蝠甚至无法正常工作。
【解决方案2】:

这将遍历%root% (C:\folder) 中的每个文件夹并将内容复制到%root% -

@echo off
set root=c:\folder
for /f %%a in ('dir /b /ad %root%') do (
    for /f %%b in ('dir /b %root%\%%a') do move "%root%\%%a\%%b" "%root%\%%b"
    rmdir "%root%\%%a"
)

【讨论】:

  • 除非您添加“tokens=*”选项,否则您将错过文件名中有空格的文件
【解决方案3】:

我用它作为批处理文件来移动当前文件夹中子文件夹中的所有文件,然后删除空文件夹。

rem Copy all files from subfolders in the current folder to the current folder.
for /R %cd% %%G IN (*.*) DO move /Y "%%G"
rem Move all directories into a temp folder in the current folder.
for /D %%I in (*) do move /y %%I %cd%\temp
rem Remove the temp folder including empty folders.
rmdir /s/q %cd%\temp

【讨论】: