无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 2886|回复: 19
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2022-2-12 20:58:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 2010无忧 于 2022-2-13 02:12 编辑

比如我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" .

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 等等所有文件夹  就不知道怎么修改了
应该是再加个循环就行了,可是就是弄不好
请了解批处理的朋友指导一下    谢谢!!!


2#
发表于 2022-2-12 21:40:24 | 只看该作者
本帖最后由 plusv 于 2022-2-12 21:45 编辑

我建议,
只要

@echo off
for /r . %%a in (*.jpg *.doc) do if exist "%%a" move /y "%%a" .

没问题后,

手动检视 二级以上文件夹,确认没有你要保存的文件,
手动删除,避免发生悲剧.

PS:
move /y "%%a" .
建议拿掉 /y 不然有同名的文件只会有一个.

点评

没事,整个盘的文件都有备份,只是想知道批处理怎么写  详情 回复 发表于 2022-2-12 21:43
回复

使用道具 举报

3#
 楼主| 发表于 2022-2-12 21:43:45 | 只看该作者

没事,整个盘的文件都有备份,只是想知道批处理怎么写

点评

你先弄个 虚拟盘 或 虚拟机 测试,避免发生悲剧. 未测试,思路推论修改. @echo off for /r d:\a %%a in (*.jpg *.doc) do if exist "%%a" move /y "%%a" d:\a for /r d:\b %%a in (*.jpg *.doc) do if exist "%%  详情 回复 发表于 2022-2-12 21:55
回复

使用道具 举报

4#
发表于 2022-2-12 21:55:51 | 只看该作者
2010无忧 发表于 2022-2-12 21:43
没事,整个盘的文件都有备份,只是想知道批处理怎么写

你先弄个 虚拟盘 或 虚拟机 测试,避免发生悲剧.
未测试,思路推论修改.

@echo off
for /r d:\a %%a in (*.jpg *.doc) do if exist "%%a" move /y "%%a" d:\a
for /r d:\b %%a in (*.jpg *.doc) do if exist "%%a" move /y "%%a" d:\b
for /r d:\c %%a in (*.jpg *.doc) do if exist "%%a" move /y "%%a" d:\c

for /f "delims=" %%i in ('dir d:\a /ad /b /s ^|sort /r') do (
rd "%%i">nul 2>nul &&if not exist %%i\ echo 成功删除:%%i
)

for /f "delims=" %%i in ('dir d:\b /ad /b /s ^|sort /r') do (
rd "%%i">nul 2>nul &&if not exist %%i\ echo 成功删除:%%i
)

for /f "delims=" %%i in ('dir d:\c /ad /b /s ^|sort /r') do (
rd "%%i">nul 2>nul &&if not exist %%i\ echo 成功删除:%%i


点评

尝试改成这样 @echo off for /d %%b in (*) do ( for /r %%a in (*.jpg *.doc) do if exist "%%a" move /y "%%a" "%%b\" ) pause 结果都给弄到最后一个文件夹里去了  详情 回复 发表于 2022-2-12 22:03
你这是指定文件夹名呀,问题是我这里有百十个文件夹,要一个个指定名字就太费劲了,有没有自动获取的办法  详情 回复 发表于 2022-2-12 21:59
回复

使用道具 举报

5#
发表于 2022-2-12 21:57:10 | 只看该作者
本帖最后由 sunsea 于 2022-2-12 22:08 编辑

放到D盘根目录下执行。没测试,建议先小规模试用。
  1. @echo off
  2. pushd "%~dp0"
  3. for /f "delims=" %%x in ('dir /a:d /b') do (
  4.     pushd ".\%%x"
  5.     for /r . %%a in (*.jpg *.doc) do if exist "%%a" move /y "%%a" .
  6.     for /f "delims=" %%i in ('dir /ad /b /s ^|sort /r') do (
  7.         rd "%%i">nul 2>nul &&if not exist %%i\ echo 成功删除:%%i
  8.     )
  9.     popd
  10. )
  11. pause
复制代码


小修了一下,忘了一个delims=
回复

使用道具 举报

6#
 楼主| 发表于 2022-2-12 21:59:17 | 只看该作者
plusv 发表于 2022-2-12 21:55
你先弄个 虚拟盘 或 虚拟机 测试,避免发生悲剧.
未测试,思路推论修改.

你这是指定文件夹名呀,问题是我这里有百十个文件夹,要一个个指定名字就太费劲了,有没有自动获取的办法

点评

>你这是指定文件夹名呀,问题是我这里有百十个文件夹,要一个个指定名字就太费劲了,有没有自动获取的办法 这需要 2 个 For @echo off for /f %%i in ('dir d:\ /ad /b') do ( @echo %%~fi echo for /r  详情 回复 发表于 2022-2-12 22:26
回复

使用道具 举报

7#
发表于 2022-2-12 22:00:22 | 只看该作者
要啥批处理,搜索*.*,详细信息视图,类型不勾选文件夹,全选文件,剪切,粘贴,搞定!

点评

你这只能一个文件夹一个文件夹的弄 慢,所以才想用批处理操作  详情 回复 发表于 2022-2-12 22:08
回复

使用道具 举报

8#
 楼主| 发表于 2022-2-12 22:03:49 | 只看该作者
plusv 发表于 2022-2-12 21:55
你先弄个 虚拟盘 或 虚拟机 测试,避免发生悲剧.
未测试,思路推论修改.

尝试改成这样
    @echo off
   
    for /d %%b in (*) do (
        for /r    %%a in (*.jpg *.doc) do if exist "%%a" move /y "%%a"  "%%b\"
     
    )
    pause
结果都给弄到最后一个文件夹里去了,循环写的不对,就是不知道怎么改
回复

使用道具 举报

9#
 楼主| 发表于 2022-2-12 22:08:15 | 只看该作者
nttwqz 发表于 2022-2-12 22:00
要啥批处理,搜索*.*,详细信息视图,类型不勾选文件夹,全选文件,剪切,粘贴,搞定!

你这只能一个文件夹一个文件夹的弄   慢,所以才想用批处理操作
回复

使用道具 举报

10#
发表于 2022-2-12 22:09:40 | 只看该作者
pushd和popd是个好东西的。

点评

能不能给出具体的批处理  详情 回复 发表于 2022-2-12 22:26
回复

使用道具 举报

11#
 楼主| 发表于 2022-2-12 22:26:12 | 只看该作者
sunsea 发表于 2022-2-12 22:09
pushd和popd是个好东西的。

能不能给出具体的批处理

点评

在5楼。  详情 回复 发表于 2022-2-12 22:27
回复

使用道具 举报

12#
发表于 2022-2-12 22:26:15 | 只看该作者
本帖最后由 plusv 于 2022-2-12 22:29 编辑
2010无忧 发表于 2022-2-12 21:59
你这是指定文件夹名呀,问题是我这里有百十个文件夹,要一个个指定名字就太费劲了,有没有自动获取的办法

>你这是指定文件夹名呀,问题是我这里有百十个文件夹,要一个个指定名字就太费劲了,有没有自动获取的办法

这需要 2 个 For
第 1 个 For 取得 文件夹
再传入给 第 2 个 For 使用.


@echo off

for /f %%i in ('dir d:\ /ad /b') do (
@echo %%~fi
echo for /r %%~fi %%a in ^(*.jpg *.doc^) do if exist "%%a" move /y "%%a" %%~fi

pause
)




回复

使用道具 举报

13#
发表于 2022-2-12 22:27:40 | 只看该作者
2010无忧 发表于 2022-2-12 22:26
能不能给出具体的批处理

在5楼。

点评

真的可以了,谢谢!!! 我学习一下  详情 回复 发表于 2022-2-12 22:33
回复

使用道具 举报

14#
 楼主| 发表于 2022-2-12 22:33:01 | 只看该作者

真的可以了,谢谢!!!  我学习一下
回复

使用道具 举报

15#
发表于 2022-2-12 22:39:25 | 只看该作者
本帖最后由 527104427 于 2022-2-13 08:20 编辑

考虑PECMD脚本吗?放到根目录就行。

#code=936T950
ENVI^ EnviMode=1
ENVI^ ForceLocal=1
FORX @%CurDir%\*,DirList,0,*
FIND *DirList<>,
{
        FORX *NL DirList,Dir,
        {
                FORX @%Dir%\*,DirList2,0,*
                FIND *DirList2<>,
                {
                        FORX *NL DirList2,Dir2,
                        {
                                FORX /s %Dir2%\*,FileList,0,FILE %FileList%->%Dir%\
                                FILE -force %Dir2%
                        }
                }
        }
}
mess 批量成功




点评

这个要搭配 PECMD.EXE 用吧,能简单解释一下你写的命令吗?  详情 回复 发表于 2022-2-12 22:53
回复

使用道具 举报

16#
 楼主| 发表于 2022-2-12 22:53:20 | 只看该作者
527104427 发表于 2022-2-12 22:39
考虑PECMD脚本吗?放到根目录就行。

#code=936T950

这个要搭配 PECMD.EXE 用吧,能简单解释一下你写的命令吗?
回复

使用道具 举报

17#
 楼主| 发表于 2022-2-13 02:11:31 | 只看该作者
nttwqz 发表于 2022-2-13 00:12
纯手机敲打,正确与否不得而知,请自测,后果自负。

这个运行后文件全删了,估计代码有问题,用5楼的代码正常。谢谢了

点评

这个点还不睡觉吗。。。 手机上看不到命令回显,和想象中有出入。有的正常就好。  详情 回复 发表于 2022-2-13 06:42
回复

使用道具 举报

18#
发表于 2022-2-13 02:44:21 | 只看该作者
用WINRAR 添加整个父文件夹到压缩包,添加时选择添加后删除源文件,解压缩时选择不解压路径,
回复

使用道具 举报

19#
发表于 2022-2-13 06:42:13 来自手机 | 只看该作者
2010无忧 发表于 2022-2-13 02:11
这个运行后文件全删了,估计代码有问题,用5楼的代码正常。谢谢了

这个点还不睡觉吗。。。

手机上看不到命令回显,和想象中有出入。有的正常就好。

点评

周末一般睡的比较晚,我属于那种能熬夜但不能早起的人  详情 回复 发表于 2022-2-13 13:36
回复

使用道具 举报

20#
 楼主| 发表于 2022-2-13 13:36:21 | 只看该作者
nttwqz 发表于 2022-2-13 06:42
这个点还不睡觉吗。。。

手机上看不到命令回显,和想象中有出入。有的正常就好。

周末一般睡的比较晚,我属于那种能熬夜但不能早起的人
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-19 12:29

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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