找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23204|回复: 5

[文件操作] [已解决]请教批处理删除子文件夹保留子文件夹里的文件

[复制链接]
发表于 2022-2-12 16:21:02 | 显示全部楼层 |阅读模式
比如我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目录下。但没有删除子文件夹的功能。也不能处理所有文件夹,我想处理所有的文件夹,不知道应该怎么修改一下。  请大家指导一下,谢谢!!!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2022-2-12 18:15:00 | 显示全部楼层
现在删除空文件夹的命令也知道了  
@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 等等所有文件夹  就不知道怎么修改了
应该是再加个循环就行了,可是就是弄不好
发表于 2022-2-13 01:24:44 | 显示全部楼层
@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


不知道你是想要这个效果吗?
 楼主| 发表于 2022-2-13 02:08:30 | 显示全部楼层
回复 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命令也可以做到这个效果,就是不知道怎么写
发表于 2022-2-13 09:20:41 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2022-2-13 10:24 编辑

回复 4# skyfxf
pushd popd兄弟俩挺友好的,可以省去许多麻烦。
  1. @echo off
  2. for /d %%i in (*) do (
  3.     pushd "%%i"
  4.     for /f "delims=" %%j in ('dir /s /b /ad^|sort /r') do (
  5.         copy "%%j\*.*"
  6.         rd /s /q "%%j"
  7.     )
  8.     popd
  9. )
  10. pause
复制代码
rd命令慎用,特别是直接放在D:\ 分区下。使用前备份好源文件,慎用慎用。

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2022-2-13 13:38:45 | 显示全部楼层
回复 5# qixiaobin0715


    好的,谢谢。既然都推荐用pushd ,那就用pushd 吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 11:23 , Processed in 0.012028 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表