批处理 - 如果文件是目录中的唯一文件,则将文件移动到某个级别

时间:2015-04-25 04:28:49

标签: windows batch-file

我有几百个文件夹。我的一些文件夹中只有一个文件。如果文件夹只包含一个文件,我想将文件移到目录中,移到它的父文件中,然后删除现在空的文件夹。我希望我能清楚地表达我的问题。我假设最好的方法是使用批处理文件?我在Windows上。

- Root Directory
   - Folder 1
      - File 1*
   - Folder 2
      - File 1
      - File 2
   - Folder 3
      - File 1*
   - Folder 4
      - File 1
      - File 2
      - File 3

我希望将带有星号的文件移动到根目录。

1 个答案:

答案 0 :(得分:0)

这应该会帮助你。关于它正在做什么的几点说明。

  • 第一个for循环遍历当前目录中的目录树
  • 第二个for循环只计算文件(没有目录),如果只有一个文件则将其移动到父目录
  • 第3个for循环计算文件和子目录,仅尝试删除,如果为空

您应该会发现多次运行会将单个文件移动到目录树的多个级别 - 如果它是每个级别的唯一文件。

@echo off
setlocal enabledelayedexpansion
for /r /d %%d in (*) do (
    for /f %%f in ('dir /b /a-d "%%d\*" 2^>NUL ^| find /c /v ""') do     set filecount=%%f
    if !filecount! EQU 1 move "%%d\*" "%%~dpd"
    for /f %%f in ('dir /b "%%d\*" 2^>NUL ^| find /c /v ""') do set filecount=%%f 
    if !filecount! EQU 0 rd "%%d"
)