无忧启动论坛

 找回密码
 注册
搜索

合并两条命令

查看数: 5922 | 评论数: 32 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-12-10 20:39

正文摘要:

本帖最后由 shuini 于 2023-12-11 14:19 编辑 第一段是遍历查找包含*ar-SA*名称的文件夹并删除: for /d /r C:\ %%i in (*ar-SA*) do (rd /s /q "%%i") 第二段是遍历查找包含*ar-SA*名称的文件并删除: ...

回复

2012fengxi 发表于 2024-12-8 14:35:12
标记以学习
shinykers 发表于 2024-12-8 13:51:14
这个很神奇,那么楼主有正确答案了么?
wn168cn@163.com 发表于 2024-12-7 10:42:08
感谢分享
fruds9981 发表于 2024-12-7 10:29:50
标记以方便后续学习
远大的理想 发表于 2024-12-7 09:45:07
谢谢分享
hijasongood 发表于 2024-12-6 17:59:29
6
hijasongood 发表于 2024-12-6 17:59:18
学习代码
hijasongood 发表于 2024-12-6 17:59:07
學習
yyz2191958 发表于 2023-12-13 19:14:20
对我来说,很深奥
willishe 发表于 2023-12-13 13:43:44
学习学习。
ppll2030 发表于 2023-12-13 09:40:10
shuini 发表于 2023-12-12 18:07
做了些修改,目前就剩完整名称为ar-SA的文件夹漏删,无关权限,因为这个是纯粹测试用的目录。
for /f "d ...

用echo显示查找结果,检查是否字符串表达问题。
表达式涵盖不全的,可以考虑用多字符串并用,中间用空格分开即可。

shuini 发表于 2023-12-12 20:05:23
kingshui 发表于 2023-12-12 16:30
forfiles 直接,简单

同样也会有字符匹配问题
shuini 发表于 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结尾的名称也无法匹配正则表达式的后半部分。

kingshui 发表于 2023-12-12 16:30:54
forfiles 直接,简单
ppll2030 发表于 2023-12-12 15:26:15
shuini 发表于 2023-12-12 12:14
代码修改为
for /f "delims=" %%i in ('dir /b /s "c:\" ^| findstr /r "[-_~]*[^a-z0-9]is-IS[-_~]*[^a ...

文件夹无法删除,请自行查看是否被其他程序占用或权限问题。
findstr的参数多加一个i,即搜索不区分大小写。如:findstr /ri
endy329 发表于 2023-12-12 10:36:28
学习一下
ppll2030 发表于 2023-12-12 10:13:51
shuini 发表于 2023-12-12 08:26
漏处理了有空格的名称,错处理了*ar-SA*。
比如处理“ar-SA”,也处理“ar-SA *”,但不处理如类似“Alt ...

哦。还有名字带空格问题,for的参数加上"delims="即可。
for /f "delims="
ppll2030 发表于 2023-12-12 10:00:44
本帖最后由 ppll2030 于 2023-12-12 10:14 编辑
shuini 发表于 2023-12-12 08:26
漏处理了有空格的名称,错处理了*ar-SA*。
比如处理“ar-SA”,也处理“ar-SA *”,但不处理如类似“Alt ...

特殊的搜索字符用正则表达式即可,把findstr的参数和搜索字符改为以下内容试试:
findstr /r "[-_~]*[^a-z0-9]ar-SA[-_~]*[^a-z0-9]"
shuini 发表于 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~”。。。即一看那名称就是特指的语言名称,而非简单以通配符匹配的组合。
ppll2030 发表于 2023-12-11 18:04:32
本帖最后由 ppll2030 于 2023-12-11 18:06 编辑

for /f  %%i in ('dir /b /s "c:\" ^| findstr /ilc:"ar-SA"') do (if exist "%%i\" (rd /q /s "%%i") else del /q /s "%%i")
newyun 发表于 2023-12-11 15:53:13
本帖最后由 newyun 于 2023-12-11 16:15 编辑

不好搞,我试了用&&也不行
kevin2023 发表于 2023-12-11 14:23:33
感谢分享
newyun 发表于 2023-12-11 13:43:09
你两次查找的路径都不一样,怎么提高效率
yyz2191958 发表于 2023-12-11 12:26:53
进来学习
shuini 发表于 2023-12-11 12:17:46
本帖最后由 shuini 于 2023-12-11 12:23 编辑

之前也是用ai合并的,但这只能删文件不能删文件夹。
holley2008 发表于 2023-12-11 09:53:53
  1. @echo off
  2. for /r %%i in (*ar-SA*) do (
  3.     if exist "%%i" (
  4.         if "%%~ai"=="d" (
  5.             rd /s /q "%%i"
  6.         ) else (
  7.             del /f /q "%%i"
  8.         )
  9.     )
  10. )
复制代码


我用AI得出这个..
北方醋 发表于 2023-12-11 09:31:41
谢谢分享!
tanglf 发表于 2023-12-11 08:50:54
学习代码

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

闽公网安备 35020302032614号

GMT+8, 2025-4-5 04:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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