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


plusv 发表于 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 不然有同名的文件只会有一个.

2010无忧 发表于 2022-2-12 21:43:45

plusv 发表于 2022-2-12 21:40
我建议,
只要



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

plusv 发表于 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


sunsea 发表于 2022-2-12 21:57:10

本帖最后由 sunsea 于 2022-2-12 22:08 编辑

放到D盘根目录下执行。没测试,建议先小规模试用。@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

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

2010无忧 发表于 2022-2-12 21:59:17

plusv 发表于 2022-2-12 21:55
你先弄个 虚拟盘 或 虚拟机 测试,避免发生悲剧.
未测试,思路推论修改.



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

nttwqz 发表于 2022-2-12 22:00:22

要啥批处理,搜索*.*,详细信息视图,类型不勾选文件夹,全选文件,剪切,粘贴,搞定!

2010无忧 发表于 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
结果都给弄到最后一个文件夹里去了,循环写的不对,就是不知道怎么改

2010无忧 发表于 2022-2-12 22:08:15

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

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

sunsea 发表于 2022-2-12 22:09:40

pushd和popd是个好东西的。

2010无忧 发表于 2022-2-12 22:26:12

sunsea 发表于 2022-2-12 22:09
pushd和popd是个好东西的。

能不能给出具体的批处理

plusv 发表于 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
)




sunsea 发表于 2022-2-12 22:27:40

2010无忧 发表于 2022-2-12 22:26
能不能给出具体的批处理

在5楼。

2010无忧 发表于 2022-2-12 22:33:01

sunsea 发表于 2022-2-12 22:27
在5楼。

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

527104427 发表于 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 批量成功




2010无忧 发表于 2022-2-12 22:53:20

527104427 发表于 2022-2-12 22:39
考虑PECMD脚本吗?放到根目录就行。

#code=936T950


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

2010无忧 发表于 2022-2-13 02:11:31

nttwqz 发表于 2022-2-13 00:12
纯手机敲打,正确与否不得而知,请自测,后果自负。

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

qingyi78 发表于 2022-2-13 02:44:21

用WINRAR 添加整个父文件夹到压缩包,添加时选择添加后删除源文件,解压缩时选择不解压路径,

nttwqz 发表于 2022-2-13 06:42:13

2010无忧 发表于 2022-2-13 02:11
这个运行后文件全删了,估计代码有问题,用5楼的代码正常。谢谢了

这个点还不睡觉吗。。。

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

2010无忧 发表于 2022-2-13 13:36:21

nttwqz 发表于 2022-2-13 06:42
这个点还不睡觉吗。。。

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

周末一般睡的比较晚,我属于那种能熬夜但不能早起的人
页: [1]
查看完整版本: 请教一个批处理 删除子文件夹保留子文件夹里的文件