找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: smatenchen

[文件操作] 求助,多种条件叠加,过滤后删除指定文件。

[复制链接]
发表于 2023-10-1 00:37:07 | 显示全部楼层
回复 13# smatenchen


    if "!str:aabb=1!" neq "!str!"
发表于 2023-10-1 08:06:58 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-10-1 08:11 编辑

回复 9# smatenchen
真是搞不懂!为什么非要把问题搞复杂化呢,有什么讲究吗?
真应了一句话,叫做“有困难要上,没有困难制造困难也要上”。
好吧,那就在楼主的基础上再增加些难度算了,不使用dir、for、del。
亦或你是在出题吗,那就移步“出题挑战”栏吧。
发表于 2023-10-1 08:42:36 | 显示全部楼层
回复 17# qixiaobin0715


    【出题挑战】版块的本意是自己已经有一个非常不错的甚至非常优秀的代码,暂时先不发出来,跟大家切磋一下题目
发表于 2023-10-1 08:46:28 | 显示全部楼层
来了,没有dir for del   
  1. powershell -c "ls |%{if($_.Name -eq '1.txt' -or $_.Name -eq '2.log' -or $_.Name -match 'aabb'){}else{Remove-Item $_}}"
复制代码
发表于 2023-10-1 10:33:50 | 显示全部楼层
回复 1# smatenchen

用第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )在命令行窗口直接执行可实现:

  1. dir /b|gawk "BEGIN{a["1.txt"];a["2.log"];a["gawk.exe"]}!/aabb/{if($0 in a)next;print "del \042"$0"\042"}"|cmd.exe
复制代码
发表于 2023-10-1 11:11:15 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. set "1.txt=1"
  3. set "2.log=1"
  4. set "%~nx0=1"

  5. for /f "delims=" %%i in ('dir /b /a-d') do (
  6.      set "str=%%i"
  7.      if not defined !str! (
  8.         if "!str!" equ "!str:aabb=!" del "!str!"
  9.      )
  10. )
复制代码
发表于 2023-10-1 14:36:18 | 显示全部楼层
使用attrib设置文件属性,使用del删除指定属性文件,这样只用两个命令
 楼主| 发表于 2023-10-1 15:12:16 | 显示全部楼层
回复 16# Five66

回复 21# terse


感谢!

【Five66】的【 if "!str:aabb=1!" neq "!str!"】应该写成【terse】的【if "!str!" equ "!str:aabb=!"】吧?

【!str:aabb=1!"】中的【=1!】可简化成【=!】,即【!str:aabb=!"】吧?

请回复!

 楼主| 发表于 2023-10-1 15:29:21 | 显示全部楼层
回复 22# 77七



感谢!

修改文件属性,破坏性太大,影响文件写入。不知文件之前的属性,修改后如何恢复?

条件里的文件名中包含aabb的文件的完整文件名是未知的,仍需用命令把它们找出来。

把文件找出来,再恢复属性……,这么多操作,只用两个命令,不可行。
改动文件,这样的操作,不可行。

 楼主| 发表于 2023-10-1 15:34:46 | 显示全部楼层
回复 17# qixiaobin0715 hlzj88 77七 ppll2030 Five66 pd1 hfxiang terse

回复 18# Batcher


感谢!

事情是这样的,
我遇到了1个问题,如第1楼,开始我想用for,dir,del,if……去解决,后觉得很困难,就用了findstr,当然问题就解决了。

但心里不满意,只能借用findstr吗?还有其它路吗?昨天试了2,3个小时,总算试出来了。

又总觉得这样的东西是自己闭门创出来的(这很受益于之前在论坛跟其他大牛学到的技艺),不献出来与人切磋一下实在可惜了!
于是把问题抽象化后发到论坛来引玉,看看是否还有更高明的解法。

万没想到被【77七】用【if "!str:~0,4!" neq "aabb" (】给四两拨了,我试了几个小时,【77七】只用简单一行就破了,这太难接受了!
不行,得再加大难度,别人也得花几个小时才能破才行。于是把文件名的特征再复杂化一点,我倒要看看你们再怎么破它。嘿嘿!

令人欣喜的是,
果然把【77七】引玉出来了,用【77七】的【if "!str:~0,4!" neq "aabb" (】已足以解决我最初遇到的问题了。
用【Five66】和【terse】的【if "!str:aabb=!" equ "!str!"】就更绝了,堪称完美!而我的则显得笨拙多了,不灵巧。

吧里是真有高人,大牛啊!

1是用findstr,2是用【77七】的【if "!str:~0,4!" neq "aabb" (】,都可以很好地解决问题。
3是用繁琐,但通用(并不比用findstr更通用,但比用【if "!str:~0,4!" neq "aabb" (】更通用)的方案。
4是用【Five66】和【terse】的【if "!str:aabb=!" equ "!str!"】,堪称完美!

还有没有第5套方案呢?

这的确就是【qixiaobin0715】的“出题挑战”,和【Batcher】的切磋一下啊!

我自横刀向天笑,去留肝胆两昆仑!问今天下,舍你其谁?

各位开席吧!哈哈!

发表于 2023-10-1 15:44:46 | 显示全部楼层
回复 24# smatenchen


  
  1. attrib /?
  2. del /?
复制代码
查看下怎么使用,我觉得你凭空臆想的问题,可能不会存在
发表于 2023-10-1 18:36:39 | 显示全部楼层
回复 23# smatenchen


【 if "!str:aabb=1!" neq "!str!"】跟【if "!str!" equ "!str:aabb=!"】都差不多吧,区别大概就是走if还是else,甚至可以换成用if not

【!str:aabb=1!"】中的【=1!】是为了懒得思考特殊情况可能造成的影响,如果代码不会因为变量str只有aabb之类的而对其他代码造成影响的话,完全可以简化成【!str:aabb=!"】

其实还是可以通过rename变换文件名的特征,照常使用【if "!str:~0,4!" neq "aabb" 】的,又或者连【if "!str:~0,4!" neq "aabb" 】都可以不用

最简单的应该还是文件属性吧,即从文件名的筛选变换到文件属性的筛选
 楼主| 发表于 2023-10-1 19:16:32 | 显示全部楼层
本帖最后由 smatenchen 于 2023-10-1 19:19 编辑

回复 27# Five66


感谢!

1,
用neq还是equ的确都行,差别在代码简捷程度。

2,
【!str:aabb=1!"】中是【=1!】或是【=!】,我测试了一下,影响不大,差别还是在代码简捷程度。

3,
【其实还是可以通过rename变换文件名的特征】,这个怎么弄的?请赐教!

4,
修改文件属性,不好吧?影响文件写入啊!具体怎么弄的?请赐教!
可以不用【if "!str:~0,4!" neq "aabb" 】?具体怎么弄的?请赐教!

受益匪浅哩!

发表于 2023-10-1 21:25:46 | 显示全部楼层
回复 28# smatenchen

通过rename给符合要求的文件名附加aabb___前缀,然后用if "!str:~0,4!" neq "aabb"判断,完事之后rename回去
同样的,通过rename给符合要求的文件名附加自定义拓展名,直接用自定义拓展名来判断,完事之后去掉自定义拓展名rename回去

文件属性大概是文件中的一个标记吧,像隐藏文件就只是拥有隐藏标记的文件,修改文件属性估计比改名还要快捷
直接用attrib命令给符合要求的文件添加隐藏属性(del命令好像不识别隐藏文件),完事后再去掉隐藏属性
 楼主| 发表于 2023-10-1 21:50:07 | 显示全部楼层
回复 29# Five66


感谢!

【通过rename给符合要求的文件名附加aabb___前缀,然后用if "!str:~0,4!" neq "aabb"判断,完事之后rename回去】
请写出一下具体代码!

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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 13:19 , Processed in 0.021597 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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