0

我想要一个能够执行以下操作的脚本

我有大约 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; / 许多地点

4

2 回答 2

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"
)

需要注意的是,如果东西中的两个或多个文件夹或文件具有相同的名称,并且它们最初放在被删除的顶级文件夹的正下方,那么程序会发出错误并且文件夹或文件不会被移动(并且顶级文件夹不会被删除)。

安东尼奥

于 2013-03-25T21:50:56.243 回答
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输出(包括不包括目录名的子目录)被逐行处理,原始和 directory-to-被目标 relroot 替换,并显示PROPOSED操作。/b/s/a-drelrooteliminate MOVE

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

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

于 2013-03-25T18:11:44.877 回答