我正在使用脚本来执行以下操作
我有大约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; /许多地点
答案 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
是否空虚 - 只是为了安全起见...