无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4667|回复: 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[^\\]*$"







39#
发表于 2023-7-13 16:29:06 | 只看该作者
for %%i in (a b c) do echo %%i
先让列表显示正确后,再往下玩。
回复

使用道具 举报

38#
发表于 2023-7-13 08:15:46 | 只看该作者
本帖最后由 conlin888 于 2023-7-13 08:27 编辑

你自己原来的代码有问题(红字演示专用, 你自己修改),

@echo off
for /F %%I in ('echo tftp') do (
   for /F "tokens=2 delims=: " %%a in ('dism /online /get-features^|Find /i ": %%I"') do if /i "%%a"=="%%I" @echo Dism /online /Disable-Feature /FeatureName:%%a
)

pause

回复

使用道具 举报

37#
 楼主| 发表于 2023-7-12 21:19:08 | 只看该作者
conlin888 发表于 2023-7-12 20:31
你自己检查一下啊,CMD中的空格bug,

for /F %%i in ('Type "%~dp0Windows\Remove.TXT" 2^>nul') do (
...

检查了,不行

点评

你自己原来的代码有问题(红字演示专用, 你自己修改), @echo offfor /F %%i in ('echo tftp') do ( set a=%%i for /F "tokens=2 delims=: " %%a in ('call dism /online /get-features^|Find /i ": %%a%%"  详情 回复 发表于 2023-7-13 08:15
回复

使用道具 举报

36#
发表于 2023-7-12 20:31:28 来自手机 | 只看该作者
本帖最后由 conlin888 于 2023-7-12 20:42 编辑
wenbieba 发表于 2023-7-12 18:01
不行,一闪而过

你自己检查一下啊,CMD中的空格bug,

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 ^| Find /i "FeatureName : %%a%%"') do if "%%a" NEQ "" Dism /online /Disable-Feature /FeatureName:%%a >nul
)

点评

检查了,不行  详情 回复 发表于 2023-7-12 21:19
回复

使用道具 举报

35#
 楼主| 发表于 2023-7-12 18:01:44 | 只看该作者
conlin888 发表于 2023-7-12 11:19
试试,

for /F %%i in ('Type "%~dp0Windows\Remove.TXT" 2^>nul') do (

不行,一闪而过

点评

你自己检查一下啊,CMD中的空格bug, 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 ^| Find / i "Fe  详情 回复 发表于 2023-7-12 20:31
回复

使用道具 举报

34#
发表于 2023-7-12 12:01:20 | 只看该作者
本帖最后由 china.gaofeng 于 2023-7-12 12:30 编辑
wenbieba 发表于 2023-7-12 11:48
能帮具体写一下吗

Get-Content 'remove.txt' |% {Get-WindowsOptionalFeature $_ -online|Disable-WindowsOptionalFeature -online}

大概是这样的
回复

使用道具 举报

33#
 楼主| 发表于 2023-7-12 11:48:45 | 只看该作者
china.gaofeng 发表于 2023-7-12 11:24
第一层FOR的括号缺失了吧?

另外,像这种目的,真不如直接用powershell来的方便

能帮具体写一下吗
回复

使用道具 举报

32#
发表于 2023-7-12 11:42:25 来自手机 | 只看该作者
第一个for忘了do
回复

使用道具 举报

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

第一层FOR的括号缺失了吧?

另外,像这种目的,真不如直接用powershell来的方便

点评

能帮具体写一下吗  详情 回复 发表于 2023-7-12 11:48
回复

使用道具 举报

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
)
回复

使用道具 举报

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
   )
运行之后无效果。麻烦大佬指点
回复

使用道具 举报

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
   )
运行之后无效果。麻烦大佬指点
回复

使用道具 举报

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

使用道具 举报

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

好的
回复

使用道具 举报

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

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

使用道具 举报

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

使用道具 举报

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"
    )
)
回复

使用道具 举报

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#
完美解决
回复

使用道具 举报

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"
    )
)
回复

使用道具 举报

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"
) )
回复

使用道具 举报

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文件夹,并没删除
回复

使用道具 举报

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 ...

谢谢大佬
回复

使用道具 举报

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"
    )
)
回复

使用道具 举报

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"
    )
)
回复

使用道具 举报

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

好的
回复

使用道具 举报

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

记得修改标题:已解决
回复

使用道具 举报

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

已成功,谢谢
回复

使用道具 举报

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

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

使用道具 举报

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

麻烦写一下
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-5 03:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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