请教一个批处理 删除子文件夹保留子文件夹里的文件
本帖最后由 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:45 编辑
我建议,
只要
@echo off
for /r . %%a in (*.jpg *.doc) do if exist "%%a" move /y "%%a" .
没问题后,
再
手动检视 二级以上文件夹,确认没有你要保存的文件,
手动删除,避免发生悲剧.
PS:
move /y "%%a" .
建议拿掉 /y 不然有同名的文件只会有一个.
plusv 发表于 2022-2-12 21:40
我建议,
只要
没事,整个盘的文件都有备份,只是想知道批处理怎么写 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 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= plusv 发表于 2022-2-12 21:55
你先弄个 虚拟盘 或 虚拟机 测试,避免发生悲剧.
未测试,思路推论修改.
你这是指定文件夹名呀,问题是我这里有百十个文件夹,要一个个指定名字就太费劲了,有没有自动获取的办法 要啥批处理,搜索*.*,详细信息视图,类型不勾选文件夹,全选文件,剪切,粘贴,搞定! 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
结果都给弄到最后一个文件夹里去了,循环写的不对,就是不知道怎么改 nttwqz 发表于 2022-2-12 22:00
要啥批处理,搜索*.*,详细信息视图,类型不勾选文件夹,全选文件,剪切,粘贴,搞定!
你这只能一个文件夹一个文件夹的弄 慢,所以才想用批处理操作 pushd和popd是个好东西的。 sunsea 发表于 2022-2-12 22:09
pushd和popd是个好东西的。
能不能给出具体的批处理 本帖最后由 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
)
2010无忧 发表于 2022-2-12 22:26
能不能给出具体的批处理
在5楼。 sunsea 发表于 2022-2-12 22:27
在5楼。
真的可以了,谢谢!!!我学习一下 本帖最后由 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 批量成功
527104427 发表于 2022-2-12 22:39
考虑PECMD脚本吗?放到根目录就行。
#code=936T950
这个要搭配 PECMD.EXE 用吧,能简单解释一下你写的命令吗? nttwqz 发表于 2022-2-13 00:12
纯手机敲打,正确与否不得而知,请自测,后果自负。
这个运行后文件全删了,估计代码有问题,用5楼的代码正常。谢谢了 用WINRAR 添加整个父文件夹到压缩包,添加时选择添加后删除源文件,解压缩时选择不解压路径, 2010无忧 发表于 2022-2-13 02:11
这个运行后文件全删了,估计代码有问题,用5楼的代码正常。谢谢了
这个点还不睡觉吗。。。
手机上看不到命令回显,和想象中有出入。有的正常就好。 nttwqz 发表于 2022-2-13 06:42
这个点还不睡觉吗。。。
手机上看不到命令回显,和想象中有出入。有的正常就好。
周末一般睡的比较晚,我属于那种能熬夜但不能早起的人
页:
[1]