标题: [文件操作] [已解决]请教批处理删除子文件夹保留子文件夹里的文件 [打印本页]
作者: skyfxf 时间: 2022-2-12 16:21 标题: [已解决]请教批处理删除子文件夹保留子文件夹里的文件
比如我D盘有很多文件夹 ,A文件夹 B文件夹 C文件夹 等等,每个文件夹下又有很多子文件夹,A下有A1 、A2 。B下又B1 、B2文件夹。A1、B1文件夹下面可能还有子文件夹。我想把所有子文件夹都删掉,但保留文件,文件格式就几种常见的图片 文档之类的。比如A文件夹下所有文件包括子文件夹里的文件都保存在A文件夹下,子文件夹都删掉。想求一个批处理,运行后的效果就是 只保留 A、B 、C这些一级文件夹,里面的子文件夹都删掉,文件保留。
@echo off
for /r . %%a in (*.jpg *.doc) do if exist "%%a" move /y "%%a" .
上面这个批处理 放在A文件夹下,可以将A文件夹里的子文件夹内容移动到A目录下。但没有删除子文件夹的功能。也不能处理所有文件夹,我想处理所有的文件夹,不知道应该怎么修改一下。 请大家指导一下,谢谢!!!
作者: skyfxf 时间: 2022-2-12 18:15
现在删除空文件夹的命令也知道了
@echo off
for /r . %%a in (*.jpg *.doc) do if exist "%%a" move /y "%%a" .
for /f "delims=" %%i in ('dir /ad /b /s ^|sort /r') do (
rd "%%i">nul 2>nul &&if not exist %%i\ echo 成功删除:%%i
)
pause
这样放到A 文件夹目录下 ,可以做到把A目录下所有子文件夹删除且保留文件。
但是我想 批量处理 D盘下单 ABC 等等所有文件夹 就不知道怎么修改了
应该是再加个循环就行了,可是就是弄不好
作者: toyerspollors 时间: 2022-2-13 01:24
@echo off
(for /f "delims=" %%a in ('dir /b /s /ad') do (
move /y "%%a\*.*" "%%a\.."&&rd %%a
))>nul 2>nul
for /f "delims=" %%i in ('dir /ad /b /s^|sort /r') do rd /q "%%i" 2>nul
pause
不知道你是想要这个效果吗?
作者: skyfxf 时间: 2022-2-13 02:08
回复 3# toyerspollors
这个也只能在一个文件夹下生效,比如在A文件夹下成功。放在D盘根目录 就没任何反应。我想要的是 一个批处理 处理D盘下所有的文件夹,运行后只保留 D盘下第一层文件夹,别人给了我一个用 pushd命令的批处理,如下
@echo off
pushd "%~dp0"
for /f "delims=" %%x in ('dir /a:d /b') do (
pushd ".\%%x"
for /r . %%a in (*.jpg *.doc) do if exist "%%a" move /y "%%a" .
for /f "delims=" %%i in ('dir /ad /b /s ^|sort /r') do (
rd "%%i">nul 2>nul &&if not exist %%i\ echo 成功删除:%%i
)
popd
)
pause
这个批处理可以达到目的,但是我觉得不用 pushd命令也可以做到这个效果,就是不知道怎么写
作者: qixiaobin0715 时间: 2022-2-13 09:20
本帖最后由 qixiaobin0715 于 2022-2-13 10:24 编辑
回复 4# skyfxf
pushd popd兄弟俩挺友好的,可以省去许多麻烦。- @echo off
- for /d %%i in (*) do (
- pushd "%%i"
- for /f "delims=" %%j in ('dir /s /b /ad^|sort /r') do (
- copy "%%j\*.*"
- rd /s /q "%%j"
- )
- popd
- )
- pause
复制代码
rd命令慎用,特别是直接放在D:\ 分区下。使用前备份好源文件,慎用慎用。
作者: skyfxf 时间: 2022-2-13 13:38
回复 5# qixiaobin0715
好的,谢谢。既然都推荐用pushd ,那就用pushd 吧
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |