我是批处理脚本的新手,需要您的帮助,因为所有已经回答的问题并不能真正解决我的问题。
我有一个文件夹结构,其中包含一个带有子文件夹和文件的父文件夹,一个带有空子文件夹的父文件夹,一个空的父文件夹或一个只有文件的父文件夹。全部放在一个主文件夹中。所以看起来像这样:
└───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)
基本上我需要的是,如果子文件夹中有一个文件,它将被上移到相应的父文件夹。 所有空的子文件夹都应删除。 所有空的父文件夹应保持不变。 父文件夹中已存在的所有文件应保持不变。
答案 0 :(得分:1)
使用两个堆叠的for /d
来
%%P
文件夹和一个%%S
:: 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"
)
)
该脚本必须位于您的主文件夹中