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

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

[复制链接]
发表于 2023-9-30 21:33:48 | 显示全部楼层 |阅读模式
本帖最后由 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。}


感谢!
 楼主| 发表于 2023-9-30 21:43:48 | 显示全部楼层
回复 1# smatenchen qixiaobin0715 77七 BAT221110 hfxiang

求助!感谢!
 楼主| 发表于 2023-9-30 21:49:11 | 显示全部楼层
回复 1# smatenchen terse pd1 qixiaobin0715 hfxiang idwma

求助!感谢!
发表于 2023-9-30 21:50:00 | 显示全部楼层
本帖最后由 hlzj88 于 2023-9-30 22:18 编辑

  1. 有问题,不可用
  2. md a
  3. move /y 1.txt a\
  4. move /y 2.log a\
  5. move /y aabb*.* a\
  6. for /f "delims=" %%i in ('dir /b/oe "*.*"') do if %%i==%~nx0 (echo,) else del /q "%%i"
  7. move /y %~dp0a\*.* %~dp0
  8. rd /q a
  9. pause
复制代码
为什么同时把a\的文件也删除了呢?
发表于 2023-9-30 21:57:25 | 显示全部楼层
想法不错,但是第5行bat文件也删除了,后面的命令不知是否还能执行?
 楼主| 发表于 2023-9-30 22:01:56 | 显示全部楼层
回复 4# hlzj88

不能移动文件,用for命令吧。
 楼主| 发表于 2023-9-30 22:03:23 | 显示全部楼层
回复 5# qixiaobin0715

不能移动文件,用for命令吧。
发表于 2023-9-30 22:10:51 | 显示全部楼层
  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. for /f "delims=" %%i in ('dir /b /a-d ^|find /v "%~nx0"') do (
  4.         set str=%%i
  5.         setlocal enabledelayedexpansion
  6.         if /i "!str!" neq "1.txt" (
  7.                 if /i "!str!" neq "2.log" (
  8.                         if "!str:~0,4!" neq "aabb" (
  9.                                 del "!str!"
  10.                         )
  11.                 )
  12.         )
  13.         endlocal
  14. )
  15. pause
复制代码
 楼主| 发表于 2023-9-30 22:35:28 | 显示全部楼层
回复 8# 77七 qixiaobin0715


感谢!

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

还是用for加其它,如dir硬扛吧!
发表于 2023-9-30 22:44:04 | 显示全部楼层
回复 9# smatenchen


   

  1. @echo off
  2. rem 批处理保存为ansi编码格式
  3. set me=%~nx0
  4. for %%i in (*) do (
  5.         set str=%%i
  6.         setlocal enabledelayedexpansion
  7.         if /i "!str!" neq "1.txt" (
  8.                 if /i "!str!" neq "2.log" (
  9.                         if "!str:~0,4!" neq "aabb" (
  10.                                 if "!str!" neq "!me!" (
  11.                                         del "!str!"
  12.                                 )
  13.                         )
  14.                 )
  15.         )
  16.         endlocal
  17. )
  18. pause
复制代码
 楼主| 发表于 2023-9-30 23:13:24 | 显示全部楼层
回复 4# hlzj88 qixiaobin0715 77七


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

找到原因了吗?

发表于 2023-9-30 23:50:47 | 显示全部楼层
回复 4# hlzj88

你没有加去除目录参数。*.*等同于*,会把目录也一并罗列出来了。
 楼主| 发表于 2023-9-30 23:52:18 | 显示全部楼层
回复 10# 77七 qixiaobin0715 hlzj88


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

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

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

 楼主| 发表于 2023-10-1 00:05:39 | 显示全部楼层
回复 12# ppll2030


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

好细心啊!了不起啊!

发表于 2023-10-1 00:26:52 | 显示全部楼层
回复 13# smatenchen


   如果是学习的话,可以去教程版块。请不要来回编辑1楼,并且把原来的问题编辑掉。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 12:03 , Processed in 0.021785 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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