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

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

本帖最后由 smatenchen 于 2023-10-1 13:39 编辑



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


方案2:
{条件,
1,同一目录下的一堆文件,1.txt,2.log,3.dat,???aabbxxx???????.gif,xxxxxaabbxxx??????.jpg,c.ini,d.dll,e.inf,……。
2,文件名中x,?都表示是未知字符,……表示还有很多其它文件。


要求,
1,保留1.txt,2.log,和文件名中包含aabb的文件,其余的删除。
2,不使用find,findstr,move。}


方案1:
{条件,
1,同一目录下的一堆文件,1.txt,2.log,3.dat,aabbxxx???????.gif,aabbxxx??????.jpg,c.ini,d.dll,e.inf,……。
2,文件名中x,?都表示是未知字符,……表示还有很多其它文件。

要求,
1,保留1.txt,2.log,和aabb开头的文件,其余的删除。
2,不使用find,findstr,move。}


感谢!

回复 1# smatenchen qixiaobin0715 77七 BAT221110 hfxiang

求助!感谢!

TOP

回复 1# smatenchen terse pd1 qixiaobin0715 hfxiang idwma

求助!感谢!

TOP

回复 4# hlzj88

不能移动文件,用for命令吧。

TOP

回复 5# qixiaobin0715

不能移动文件,用for命令吧。

TOP

回复 8# 77七 qixiaobin0715


感谢!

用了find,findstr,move,问题就很简单了。

还是用for加其它,如dir硬扛吧!

TOP

回复 4# hlzj88 qixiaobin0715 77七


【为什么同时把a\的文件也删除了呢?】

找到原因了吗?

TOP

回复 10# 77七 qixiaobin0715 hlzj88


【if "!str:~0,4!" neq "aabb" (】

巧妙啊!充分利用了文件名特征。我之前没想到这个啊!

再增加难度,aabb在文件名中出现的位置不确定,使用"!str:~0,4!"已不可行了。
这又该如何?

TOP

回复 12# ppll2030


【你没有加去除目录参数。*.*等同于*,会把目录也一并罗列出来了。】

好细心啊!了不起啊!

TOP

回复 16# Five66

回复 21# terse


感谢!

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

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

请回复!

TOP

回复 22# 77七



感谢!

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

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

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

TOP

回复 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】的切磋一下啊!

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

各位开席吧!哈哈!

TOP

本帖最后由 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" 】?具体怎么弄的?请赐教!

受益匪浅哩!

TOP

回复 29# Five66


感谢!

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

TOP

回复 31# Five66

回复 32# Five66
   

感谢!

1,
你也发现了这个顺序bug。

2,
【if "!str!" neq "!self!" rename "!str!" "!str:~7!"】里的【"!str:~7!"】应该改成【"!str:~8!"】。

3,
代码这么多,不简捷,肯定不如【if "!str!" equ "!str:aabb=!"】的方案。不实用,探讨,拓展一下方案还行。

TOP

返回列表