无忧启动论坛

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

[发布] 合并两条命令

[复制链接]
跳转到指定楼层
1#
发表于 2023-12-10 20:39:39 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 shuini 于 2023-12-11 14:19 编辑

第一段是遍历查找包含*ar-SA*名称的文件夹并删除:
for /d /r C:\ %%i in (*ar-SA*) do (rd /s /q "%%i")
第二段是遍历查找包含*ar-SA*名称的文件并删除:

for /r C:\ %%i in (*ar-SA*) do (del /f /q "%%i")


这样需要两次查找,效率不高,该怎样合并这两条命令?

2#
 楼主| 发表于 2023-12-11 12:17:46 | 显示全部楼层
本帖最后由 shuini 于 2023-12-11 12:23 编辑

之前也是用ai合并的,但这只能删文件不能删文件夹。
回复

使用道具 举报

3#
 楼主| 发表于 2023-12-12 08:26:13 | 显示全部楼层
ppll2030 发表于 2023-12-11 18:04
for /f  %%i in ('dir /b /s "c:\" ^| findstr /ilc:"ar-SA"') do (if exist "%%i\" (rd /q /s "%%i") else ...

漏处理了有空格的名称,错处理了*ar-SA*。
比如处理“ar-SA”,也处理“ar-SA *”,但不处理如类似“Altar-SA”或“ar-SATA”结构的名称。
简单点说就是只处理单纯的“ar-SA”或“-ar-SA-”或“_ar-SA_”或“~ar-SA~”或“-ar-SA~”。。。即一看那名称就是特指的语言名称,而非简单以通配符匹配的组合。

点评

哦。还有名字带空格问题,for的参数加上"delims="即可。 for /f "delims="  详情 回复 发表于 2023-12-12 10:13
特殊的搜索字符用正则表达式即可,把findstr的参数和搜索字符改为以下内容试试: findstr /r "[-_~]*[^a-z0-9]ar-SA[-_~]*[^a-z0-9]"  详情 回复 发表于 2023-12-12 10:00
回复

使用道具 举报

4#
 楼主| 发表于 2023-12-12 12:14:08 | 显示全部楼层
本帖最后由 shuini 于 2023-12-12 12:15 编辑
ppll2030 发表于 2023-12-12 10:13
哦。还有名字带空格问题,for的参数加上"delims="即可。
for /f "delims="

代码修改为
for /f "delims=" %%i in ('dir /b /s "c:\" ^| findstr /r "[-_~]*[^a-z0-9]is-IS[-_~]*[^a-z0-9]"') do (if exist "%%i\" (rd /q /s "%%i") else del /q /s "%%i")
直观点上一张包含“is-IS”名称的文件图。最新的处理结果是只删除了is-IS文件夹里的文件,is-IS文件夹却保留了。

其他类似$$_azurearcsetup_arcsetup_is-is_d88b442544315392.cdf-ms的文件没有删除,当然像wow64_microsoft-windows-iis-isapifilter_31bf3856ad364e35_10.0.20348.825_none_469c74f7c71a54c6.manifest这类文件本就不该删除。

1.png (19.6 KB, 下载次数: 11)

1.png

点评

文件夹无法删除,请自行查看是否被其他程序占用或权限问题。 findstr的参数多加一个i,即搜索不区分大小写。如:findstr /ri  详情 回复 发表于 2023-12-12 15:26
回复

使用道具 举报

5#
 楼主| 发表于 2023-12-12 18:07:03 | 显示全部楼层
本帖最后由 shuini 于 2023-12-12 19:38 编辑
ppll2030 发表于 2023-12-12 15:26
文件夹无法删除,请自行查看是否被其他程序占用或权限问题。
findstr的参数多加一个i,即搜索不区分大小 ...

做了些修改,目前就剩完整名称为ar-SA的文件夹漏删,无关权限,因为这个是纯粹测试用的目录。
for /f "delims=" %%i in ('dir /b /s "c:\0000" ^| findstr /R /I ".*[-_~]ar-SA[-_~].*"') do (if exist "%%i\" (rd /q /s "%%i") else del /q /s "%%i")
-----------------------
以上代码问题在于以ar-SA开头的名称无法匹配正则表达式的前半部分,以ar-SA结尾的名称也无法匹配正则表达式的后半部分。

点评

用echo显示查找结果,检查是否字符串表达问题。 表达式涵盖不全的,可以考虑用多字符串并用,中间用空格分开即可。  详情 回复 发表于 2023-12-13 09:40
回复

使用道具 举报

6#
 楼主| 发表于 2023-12-12 20:05:23 | 显示全部楼层
kingshui 发表于 2023-12-12 16:30
forfiles 直接,简单

同样也会有字符匹配问题
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-22 06:43

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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