无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4672|回复: 40
打印 上一主题 下一主题

[已解决] 如何取消批处理重复删除子目录文件夹

[复制链接]
跳转到指定楼层
1#
发表于 2023-7-10 18:50:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wenbieba 于 2023-7-11 17:24 编辑

以Windows Defender文件夹为例
利用批处理删除Windows Defender文件夹,比如此文件下有子文件夹0000,11111等但是在用下方批处理时存在二次删除现象,如第一次显示已成功处理三个文件夹,后又出现找不到Windows Defender\0000路径,或找不到Windows Defender\1111路径,但其实之前已经删除了,这样一来会出现大量找不到路径错误
命令如下:
@echo off
for /f "delims=" %%i in ('dir /b /ad /s "%SystemDrive%\Program Files" "%SystemDrive%\Program Files (x86)" "%SystemDrive%\ProgramData\Microsoft" 2^>nul ^| findstr /ilc:"Windows Defender"') do (
    echo %%i
    takeown /f "%%i" && icacls "%%i" /grant administrators:F /t
    RD /Q /S "%%i"
)
曾修改dir / 参数,findstr / 参数,均无果


附上相关提示
已处理的文件: C:\Program Files\Windows Defender
已处理的文件: C:\Program Files\Windows Defender\11111111
已成功处理 2 个文件; 处理 0 个文件时失败

I:\☆★MSMGToolkit★☆\Toolkit>(
if exist C:\Program Files\Windows Defender\11111111 takeown /f "C:\Program Files\Windows Defender\11111111"   && icacls "C:\Program Files\Windows Defender\11111111" /grant administrators:F /t
RMDIR /S /Q "C:\Program Files\Windows Defender\11111111"
)
系统找不到指定的路径。




请教大师如何修改



经测试,12#完美解决,
findstr /ilc:"Windows Defender
改为
findstr /i /r /c:"Windows Defender[^\\]*$"







2#
发表于 2023-7-10 19:41:07 | 只看该作者
在do循环里加个 if exist %%i 判断呗

点评

还是不行,存在二次删除,找不到路径  详情 回复 发表于 2023-7-10 19:57
回复

使用道具 举报

3#
 楼主| 发表于 2023-7-10 19:57:30 | 只看该作者
china.gaofeng 发表于 2023-7-10 19:41
在do循环里加个 if exist %%i 判断呗

还是不行,存在二次删除,找不到路径
回复

使用道具 举报

4#
发表于 2023-7-10 20:07:36 | 只看该作者
如果你只是要删除Windows Defender文件夹,那就在findstr里用正则表达式限定恰恰到Windows Defender目录

findstr /i /r /c:"Windows Defender$"

点评

大佬能帮看看这个吗, 利用命令关闭一些Windows功能,如:TFTP、Microsoft-Hyper-V用此以TFTP为例 Dism /online /Get-FeatureInfo /FeatureName:TFTP 均运行正常,可关闭, 为了方便,把需要禁用的功能名写入一  详情 回复 发表于 2023-7-12 10:27
目的就是删除含有指定字符的文件夹  详情 回复 发表于 2023-7-10 20:25
还是有问题,在Program Files目录里新建的Windows Defender222文件夹没删除掉  详情 回复 发表于 2023-7-10 20:23
谢谢,已完美解决  发表于 2023-7-10 20:21
回复

使用道具 举报

5#
发表于 2023-7-10 20:07:57 来自手机 | 只看该作者
先不要删,输出列表

点评

怎么改  详情 回复 发表于 2023-7-10 20:31
回复

使用道具 举报

6#
 楼主| 发表于 2023-7-10 20:23:49 | 只看该作者
china.gaofeng 发表于 2023-7-10 20:07
如果你只是要删除Windows Defender文件夹,那就在findstr里用正则表达式限定恰恰到Windows Defender目录

...

还是有问题,在Program Files目录里新建的Windows Defender222文件夹没删除掉
回复

使用道具 举报

7#
 楼主| 发表于 2023-7-10 20:25:35 | 只看该作者
china.gaofeng 发表于 2023-7-10 20:07
如果你只是要删除Windows Defender文件夹,那就在findstr里用正则表达式限定恰恰到Windows Defender目录

...

目的就是删除含有指定字符的文件夹
回复

使用道具 举报

8#
 楼主| 发表于 2023-7-10 20:31:42 | 只看该作者
szwp 发表于 2023-7-10 20:07
先不要删,输出列表

怎么改

点评

麻烦写一下  详情 回复 发表于 2023-7-10 21:28
删除父后就不需删除子了,要判断  详情 回复 发表于 2023-7-10 20:49
回复

使用道具 举报

9#
发表于 2023-7-10 20:49:58 来自手机 | 只看该作者
wenbieba 发表于 2023-7-10 20:31
怎么改

删除父后就不需删除子了,要判断
回复

使用道具 举报

10#
发表于 2023-7-10 20:53:24 | 只看该作者
wenbieba 发表于 2023-7-10 20:23
还是有问题,在Program Files目录里新建的Windows Defender222文件夹没删除掉

那你试试把正则表达式改成"Windows Defender[^\\]*$"
回复

使用道具 举报

11#
 楼主| 发表于 2023-7-10 21:28:21 | 只看该作者

麻烦写一下
回复

使用道具 举报

12#
发表于 2023-7-10 21:53:22 | 只看该作者
wenbieba 发表于 2023-7-10 20:23
还是有问题,在Program Files目录里新建的Windows Defender222文件夹没删除掉

findstr /i /r /c:"Windows Defender[^\\]*$"

点评

已成功,谢谢  详情 回复 发表于 2023-7-10 22:28
回复

使用道具 举报

13#
 楼主| 发表于 2023-7-10 22:28:07 | 只看该作者
china.gaofeng 发表于 2023-7-10 21:53
findstr /i /r /c:"Windows Defender[^\\]*$"

已成功,谢谢

点评

记得修改标题:已解决  详情 回复 发表于 2023-7-11 08:57
回复

使用道具 举报

14#
发表于 2023-7-11 08:57:26 | 只看该作者

记得修改标题:已解决

点评

好的  详情 回复 发表于 2023-7-11 09:11
回复

使用道具 举报

15#
 楼主| 发表于 2023-7-11 09:11:25 | 只看该作者
holley2008 发表于 2023-7-11 08:57
记得修改标题:已解决

好的

点评

修改完标题,应该编辑帖子,上面是原来的问题,下面附上解决方案一、方案二。 至少也要提示几楼是正确解答。这样子有利于后来查询者快速获得帮助。  详情 回复 发表于 2023-7-11 16:39
回复

使用道具 举报

16#
发表于 2023-7-11 09:52:27 | 只看该作者
用find也可以,

@echo off
for /f "delims=" %%i in ('dir /b /ad /s "%SystemDrive%\Program Files\" "%SystemDrive%\Program Files (x86)\" "%SystemDrive%\ProgramData\Microsoft\" 2^>nul^|find /i "Windows Defender"') do (
    echo %%~ni|find /i "Windows Defender">nul&&(
      echo %%i
      takeown /f "%%i" && icacls "%%i" /grant administrators:F /t
      RD /Q /S "%%i"
    )
)

点评

这个还是存在二次删除现象, 已处理的文件: C:\Program Files\Windows Defender11111 已处理的文件: C:\Program Files\Windows Defender11111\2222 已成功处理 2 个文件; 处理 0 个文件时失败 I:\☆★MSMGTo  详情 回复 发表于 2023-7-11 11:56
回复

使用道具 举报

17#
发表于 2023-7-11 10:44:48 | 只看该作者
本帖最后由 conlin888 于 2023-7-11 10:49 编辑

不用find,效率更高

for /f "delims=" %%i in ('echo "%SystemDrive%\Program Files"^&echo "%SystemDrive%\Program Files (x86)"^&echo "%SystemDrive%\ProgramData\Microsoft"') do (
    if exist "%%~i\Windows Defender\" (
       echo %%~i\Windows Defender
       takeown /f "%%~i\Windows Defender" && icacls "%%~i\Windows Defender" /grant administrators:F /t
       RD /Q /S "%%~i\Windows Defender"
    )
)

点评

12# 完美解决  详情 回复 发表于 2023-7-11 11:58
不行的,刚新建一个Windows Defender025487文件夹,并没删除  详情 回复 发表于 2023-7-11 11:54
谢谢大佬  详情 回复 发表于 2023-7-11 11:49
回复

使用道具 举报

18#
 楼主| 发表于 2023-7-11 11:49:12 | 只看该作者
conlin888 发表于 2023-7-11 10:44
不用find,效率更高

for /f "delims=" %%i in ('echo "%SystemDrive%\Program Files"^&echo "%SystemDriv ...

谢谢大佬
回复

使用道具 举报

19#
 楼主| 发表于 2023-7-11 11:54:12 | 只看该作者
conlin888 发表于 2023-7-11 10:44
不用find,效率更高

for /f "delims=" %%i in ('echo "%SystemDrive%\Program Files"^&echo "%SystemDriv ...

不行的,刚新建一个Windows Defender025487文件夹,并没删除

点评

文件夹不固定, 只能用find了: @echo off for /f "delims=" %%i in ('dir /b /ad /s "%SystemDrive%\Program Files\" "%SystemDrive%\Program Files (x86)\" "%SystemDrive%\ProgramData\Microsoft\" 2^>nul^|fin  详情 回复 发表于 2023-7-11 11:57
回复

使用道具 举报

20#
 楼主| 发表于 2023-7-11 11:56:50 | 只看该作者
conlin888 发表于 2023-7-11 09:52
用find也可以,

@echo off

这个还是存在二次删除现象,

已处理的文件: C:\Program Files\Windows Defender11111
已处理的文件: C:\Program Files\Windows Defender11111\2222
已成功处理 2 个文件; 处理 0 个文件时失败

I:\☆★MSMGToolkit★☆\Toolkit>(echo 2222  | find /i "Windows Defender" 1>nul  && (
echo C:\Program Files\Windows Defender11111\2222
takeown /f "C:\Program Files\Windows Defender11111\2222"   && icacls "C:\Program Files\Windows Defender11111\2222" /grant administrators:F /t
RD /Q /S "C:\Program Files\Windows Defender11111\2222"
) )
回复

使用道具 举报

21#
发表于 2023-7-11 11:57:24 | 只看该作者
wenbieba 发表于 2023-7-11 11:54
不行的,刚新建一个Windows Defender025487文件夹,并没删除

文件夹不固定, 只能用find了:

@echo off
for /f "delims=" %%i in ('dir /b /ad /s "%SystemDrive%\Program Files\" "%SystemDrive%\Program Files (x86)\" "%SystemDrive%\ProgramData\Microsoft\" 2^>nul^|find /i "Windows Defender"') do (
    echo %%~ni|find /i "Windows Defender">nul&&(
      echo %%i
      takeown /f "%%i" && icacls "%%i" /grant administrators:F /t
      RD /Q /S "%%i"
    )
)
回复

使用道具 举报

22#
 楼主| 发表于 2023-7-11 11:58:03 | 只看该作者
conlin888 发表于 2023-7-11 10:44
不用find,效率更高

for /f "delims=" %%i in ('echo "%SystemDrive%\Program Files"^&echo "%SystemDriv ...

12#
完美解决

点评

解决了就好, 其实用exist判断也可以了, @echo off for /f "delims=" %%i in ('dir /b /ad /s "%SystemDrive%\Program Files\" "%SystemDrive%\Program Files (x86)\" "%SystemDrive%\ProgramData\Microsoft\" 2^>n  详情 回复 发表于 2023-7-11 14:14
回复

使用道具 举报

23#
发表于 2023-7-11 14:14:03 | 只看该作者

解决了就好, 其实用exist判断也可以了,
@echo off
for /f "delims=" %%i in ('dir /b /ad /s "%SystemDrive%\Program Files\" "%SystemDrive%\Program Files (x86)\" "%SystemDrive%\ProgramData\Microsoft\" 2^>nul^|find /i "Windows Defender"') do (
    if exist "%%i\" (
      echo %%i
      takeown /f "%%i" && icacls "%%i" /grant administrators:F /t
      RD /Q /S "%%i"
    )
)

点评

大佬能帮看看这个吗, 利用命令关闭一些Windows功能,如:TFTP、Microsoft-Hyper-V用此以TFTP为例 Dism /online /Get-FeatureInfo /FeatureName:TFTP 均运行正常,可关闭, 为了方便,把需要禁用的功能名写入一  详情 回复 发表于 2023-7-12 10:30
回复

使用道具 举报

24#
发表于 2023-7-11 16:09:06 | 只看该作者
先删父再删子就会找不到,反过来就不会。
回复

使用道具 举报

25#
发表于 2023-7-11 16:39:38 | 只看该作者

修改完标题,应该编辑帖子,上面是原来的问题,下面附上解决方案一、方案二。
至少也要提示几楼是正确解答。这样子有利于后来查询者快速获得帮助。

点评

好的  详情 回复 发表于 2023-7-11 17:00
回复

使用道具 举报

26#
 楼主| 发表于 2023-7-11 17:00:55 | 只看该作者
microlaf 发表于 2023-7-11 16:39
修改完标题,应该编辑帖子,上面是原来的问题,下面附上解决方案一、方案二。
至少也要提示几楼是正确解 ...

好的
回复

使用道具 举报

27#
发表于 2023-7-11 17:30:42 | 只看该作者
感谢分享
回复

使用道具 举报

28#
 楼主| 发表于 2023-7-12 10:27:49 | 只看该作者
china.gaofeng 发表于 2023-7-10 20:07
如果你只是要删除Windows Defender文件夹,那就在findstr里用正则表达式限定恰恰到Windows Defender目录

...

大佬能帮看看这个吗,
利用命令关闭一些Windows功能,如:TFTP、Microsoft-Hyper-V用此以TFTP为例
Dism /online /Get-FeatureInfo /FeatureName:TFTP  均运行正常,可关闭,
为了方便,把需要禁用的功能名写入一个TXT记事本本內
用以下命令执行:

for /F %%i in (' Type "%~dp0Windows\Remove.TXT" 2^>nul')
for /F "tokens=2 delims=: " %%a in ('dism /online /get-features ^| Findstr /I /C:"FeatureName : %%i"') do if "%%a" NEQ "" Call Dism /online /Disable-Feature /FeatureName:%%a >nul
   )
运行之后无效果。麻烦大佬指点
回复

使用道具 举报

29#
 楼主| 发表于 2023-7-12 10:30:28 | 只看该作者
conlin888 发表于 2023-7-11 14:14
解决了就好, 其实用exist判断也可以了,
@echo off
for /f "delims=" %%i in ('dir /b /ad /s "%SystemD ...

大佬能帮看看这个吗,
利用命令关闭一些Windows功能,如:TFTP、Microsoft-Hyper-V用此以TFTP为例
Dism /online /Get-FeatureInfo /FeatureName:TFTP  均运行正常,可关闭,
为了方便,把需要禁用的功能名写入一个TXT记事本本內
用以下命令执行:

for /F %%i in (' Type "%~dp0Windows\Remove.TXT" 2^>nul')
for /F "tokens=2 delims=: " %%a in ('dism /online /get-features ^| Findstr /I /C:"FeatureName : %%i"') do if "%%a" NEQ "" Call Dism /online /Disable-Feature /FeatureName:%%a >nul
   )
运行之后无效果。麻烦大佬指点

点评

试试, for /F %%i in ('Type "%~dp0Windows\Remove.TXT" 2^>nul') do ( set a=%%i for /F "tokens=2 delims=: " %%a in ('call dism /online /get-features ^| Findstr /I /C:"FeatureName : %%a%%"') do  详情 回复 发表于 2023-7-12 11:19
回复

使用道具 举报

30#
发表于 2023-7-12 11:19:02 | 只看该作者
wenbieba 发表于 2023-7-12 10:30
大佬能帮看看这个吗,
利用命令关闭一些Windows功能,如:TFTP、Microsoft-Hyper-V用此以TFTP为例
Dism ...

试试,

for /F %%i in ('Type "%~dp0Windows\Remove.TXT" 2^>nul') do (
   set a=%%i
   for /F "tokens=2 delims=: " %%a in ('call dism /online /get-features ^| Findstr /I /C:"FeatureName : %%a%%"') do if "%%a" NEQ "" Dism /online /Disable-Feature /FeatureName:%%a >nul
)

点评

不行,一闪而过  详情 回复 发表于 2023-7-12 18:01
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-5 10:16

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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