用于删除目录但保留文件的脚本

时间:2013-03-25 17:10:09

标签: windows batch-file bulk

我正在使用脚本来执行以下操作

我有大约2000个目录,里面有文件和文件夹

我想删除主文件夹,但保留文件夹中的所有内容

这是一个文件夹的例子

Folder A / Folder 2 / Video 1
           Image1
           Image2

所以我希望它能够删除主要的第一个文件夹,在这种情况下它将是'文件夹A'

Folder 2 / Video 1
Image1
Image2

希望你能理解我想要做的事情,不仅要问! 干杯

额外信息

从此

C:/folder A/Stuff
C:/folder B/Stuff
C:/folder C/Stuff

到此

C:/stuff
C:/sfuff
C:/sfuff

我只是希望这个bat能够删除文件夹并将所有内容从该文件​​夹中移动到我运行.bat的地方,我也希望能够在其他驱动器上运行.bat D:/ E; / F; /许多地点

2 个答案:

答案 0 :(得分:1)

如果您的磁盘中有此结构:

C:\Folder A
|  | Folder 2
|  | | Video 1
|  | | | Image1
|  | | | Image2

...然后执行这些命令:

cd "\Folder A"
move "Folder 2" ..

...然后你得到这个结果:

C:\Folder A
|  Folder 2
|  | Video 1
|  | | Image1
|  | | Image2

也就是说,它将“文件夹2”向上移动一级,达到“文件夹A”的相同级别。如果你想对“文件夹A”中的所有文件夹做同样的事情然后删除它,这个批处理文件会这样做:

@echo off
cd "\Folder A"
for /F "delims=" %%a in ('dir /B /AD') do (
   move "%%a" ..
)
cd ..
rd "\Folder A"

这是你想要的吗?

编辑:新版本已添加为新评论的答案

@echo off
rem Eliminate all folders present at the same level of the Batch file
rem and move their contents one level up
for /F "delims=" %%a in ('dir /B /AD') do (
   cd "%%a"
   for /F "delims=" %%b in ('dir /B /AD') do (
      move "%%b" ..
   )
   move *.* ..
   cd ..
   rd "%%a"
)

您必须注意,如果这些内容中的两个或多个文件夹或文件具有相同的名称,并且它们最初位于正在删除的顶级文件夹的正下方,则程序将发出错误并将文件夹或文件不会被移动(并且不会删除顶级文件夹)。

安东尼奥

答案 1 :(得分:0)

@ECHO OFF
SETLOCAL enabledelayedexpansion
SET "relroot=c:\destdir"
SET "relrootd=c:\destdir"
SET "eliminate=folder a"
XCOPY /t /e "%relroot%\%eliminate%" "%relrootd%"
FOR /f "delims=" %%i IN ('dir /s /b /a-d "%relroot%\%eliminate%"') DO (
  SET dest=%%i
  SET dest=!dest:%relroot%\%eliminate%=%relrootd%!
  ECHO MOVE "%%i" "!dest!" >nul
)

这应该这样做 - 但它可能不会处理对poison CMD.EXE具有特殊含义的某些^&!%文件/目录名字符 - 常规字母,符号和空格应该没问题

relroot是来源,relrootd是目的地。如果你愿意,它们可以相同或不同。我使用c:\destdir,因为那是我用来测试批量文件的目录。

XCOPY会创建一个合适的空树。

DIR基本模式/b中的/s输出,包括子目录/a-d,不包括目录名,逐行处理,原始relroot和目录 - to - eliminate将替换为目标relroot并显示 PROPOSED MOVE操作。

验证后,请移除ECHO关键字以激活移动。

我会在删除之前检查原始目录relroot\eliminate是否空虚 - 只是为了安全起见...