使用批处理脚本将文件上移一级文件夹

时间:2018-07-16 13:08:30

标签: batch-file move directory directory-structure

我是批处理脚本的新手,需要您的帮助,因为所有已经回答的问题并不能真正解决我的问题。

我有一个文件夹结构,其中包含一个带有子文件夹和文件的父文件夹,一个带有空子文件夹的父文件夹,一个空的父文件夹或一个只有文件的父文件夹。全部放在一个主文件夹中。所以看起来像这样:

└───Main-Folder
    ├───Parent-folder 1
    │   └───Sub-folder 1 (empty)
    ├───Parent-folder 2
    │   └───Sub-folder 2
    │           File 2
    │
    ├───Parent-folder 3
    │       File 3
    │
    └───Parent-folder 4 (empty)

基本上我需要的是,如果子文件夹中有一个文件,它将被上移到相应的父文件夹。 所有空的子文件夹都应删除。 所有空的父文件夹应保持不变。 父文件夹中已存在的所有文件应保持不变。

2 个答案:

答案 0 :(得分:1)

使用两个堆叠的for /d

  • 首先迭代父%%P文件夹和一个
  • 第二个子文件夹%%S
  • Move和RD命令的输出以及错误输出被重定向为null以禁止显示消息

:: Q:\Test\2018\07\16\SO_51362593.cmd
@Echo off
Pushd "A:\Main-folder" || Exit /B 1
For /d %%P in (*) Do (
    For /d %%S in ("%%P\*") Do (
        Move "%%~fS\*" "%%~fP\" 2>&1>Nul
        RD /S /Q "%%~fS" 2>&1>Nul
    )
)
PopD

运行批次后的示例tree /f

> tree /f
Auflistung der Ordnerpfade für Volume RamDisk
└───Main-Folder
    ├───Parent-folder 1
    ├───Parent-folder 2
    │       File 2
    │
    ├───Parent-folder 3
    │       File 3
    │
    └───Parent-folder 4 (empty)

答案 1 :(得分:0)

这样的例子应该适合您的示例:

REM for each parent folder in your main folder
for /F %%i in ('dir /A:d /b') DO (
    REM for each subfolder
    for /F %%j in ('dir /A:d /b "%%i"') DO (
        copy "%%i\%%j\*.*" "%%i"
        rd /s "%%i\%%j"
    )
)

该脚本必须位于您的主文件夹中