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

[文本处理] 【已解决】求BAT脚本删除文件夹下所有包含相同字符的TXT文件

[复制链接]
发表于 2024-3-1 14:41:04 | 显示全部楼层 |阅读模式
本帖最后由 kissmylove 于 2024-3-3 12:54 编辑

举例 一个文件夹A下有很多子文件夹,每个子文件夹下包含1个TXT文本,有的文本内容是 刘德华唱歌真好听,有的内容是张学友唱歌真好听,现在想要批量删除文件夹A下所有内容是"张学友唱歌真好听"的TXT文本,删除后相对应的文件夹就会变为空文件夹,这些空文件夹也要删掉
求大佬们教下 要怎么做这个BAT
发表于 2024-3-1 16:42:43 | 显示全部楼层
  1. @echo off
  2. for /f "delims=" %%i in ('dir /ad /b') do (
  3.     find /i "张学友唱歌真好听" "%%i\*.txt" >nul && rd /q/s "%%i"
  4. )
  5. pause
复制代码
发表于 2024-3-1 17:03:50 | 显示全部楼层
回复 1# kissmylove

文件内容是abc和文件包含abc是两码事。楼主指的是...
 楼主| 发表于 2024-3-1 17:12:50 | 显示全部楼层
回复 2# czjt1234


   大佬用了你的没有反应。。。。
 楼主| 发表于 2024-3-1 17:13:17 | 显示全部楼层
回复 3# aloha20200628
文件内容是纯中文加一个句号
发表于 2024-3-1 18:12:10 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-3-1 19:06 编辑

回复 5# kissmylove

假定目标目录是 d:\a,目标文件是其子目录中且只在子目录中的*.txt文件

  1. @echo off &for /f "delims=" %%F in ('dir /b/s/a-d d:\a\*.txt') do (
  2.     (find "张学友唱歌真好听。" "%%~F">nul) && (rd /s /q "%%~dpF")
  3. )
复制代码
发表于 2024-3-1 19:09:26 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-3-1 19:57 编辑

回复 5# kissmylove

建议楼主先复制一个小范围样本试行6楼代码,成功无误后再继续...
如果主目录 d:\a  仅有子目录且只有一层子目录,用6楼代码应该可以,如主目录中还有文本文件,有可能会出错,此时请改用如下代码

  1. @echo off &for /f "delims=" %%F in ('dir /b/s/a-d d:\a\*.txt') do (
  2.     (find "张学友唱歌真好听。" "%%~F">nul) && (if /i "%%~dpF" neq "d:\a" (rd /s /q "%%~dpF") else del /q "%%~F")
  3. )
复制代码
发表于 2024-3-1 20:48:39 | 显示全部楼层
回复 4# kissmylove


   你的文本是什么编码格式?如果是utf-8,将2楼代码保存为utf-8编码,代码开头加 chcp 65001
发表于 2024-3-1 22:35:17 | 显示全部楼层
回复 1# kissmylove


    请把测试用的“文件夹A”打包压缩上传到网盘,我试试。
 楼主| 发表于 2024-3-2 08:46:58 | 显示全部楼层
回复 9# Batcher


    哥哥 网盘在哪里呀 是哪个网盘
发表于 2024-3-2 09:44:51 | 显示全部楼层
本帖最后由 czjt1234 于 2024-3-2 09:46 编辑

回复 10# kissmylove


    百度网盘
  1. @echo off
  2. for /f "delims=" %%i in ('dir /ad /b') do (
  3.     find /i "张学友唱歌真好听" "%%i\*.txt" >nul && rd /q/s "%%i"
  4. )
  5. chcp 65001
  6. for /f "delims=" %%i in ('dir /ad /b') do (
  7.     find /i "张学友唱歌真好听" "%%i\*.txt" >nul && rd /q/s "%%i"
  8. )
  9. pause
复制代码
发表于 2024-3-2 12:05:39 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-3-2 13:03 编辑


若真是数据文件编码问题所致,则是“三点一线”的老生常谈,只要确保数据文件编码和批处理脚本编码与系统当前码页相同就可以了》例如 chcp 936对应简中编码的数据文件和简中编码的脚本文件;chcp 65001对应utf-8编码的数据文件和utf-8的脚本文件。
但若与目录结构有关,例如类似下面所示
D:\A
├─目录1
│      1a.txt

└─目录2
        2a.txt

则用6楼代码就没问题(假设数据文件是简中编码)
若目录结构类似下面所示
D:\A
│  a.txt
│  b.txt

├─目录1
│  │  1a.txt
│  │
│  └─目录11
│          11a.txt

└─目录2
    │  2a.txt
    │
    └─目录21
            21a.txt

可改用如下代码尝试(本代码亦可用于第一种目录结构),如果每个子目录中的数据文件均被匹配成功即可删除该数据文件及其所在目录

  1. @echo off
  2. ::若数据文件和本脚本文件是简中编码则删除下一行
  3. chcp 65001>nul&cls
  4. ::设置目标根目录如下
  5. set "rootD=d:\a"
  6. for /f "delims=" %%F in ('dir /b/s/a-d "%rootD%\*.txt"^|sort /r') do (
  7.     (find "张学友唱歌真好听。" "%%~F">nul) && (
  8.             (del /q "%%~F") & if /i "%%~dpF" neq "%rootD%" (rd /q "%%~dpF")
  9.     ) 2>nul
  10. )
复制代码
发表于 2024-3-2 12:20:31 | 显示全部楼层
回复 10# kissmylove


百度:https://pan.baidu.com
蓝奏:https://www.lanzou.com
腾讯:https://www.weiyun.com 需要登录才能下载
阿里:https://www.aliyundrive.com 需要登录才能下载
 楼主| 发表于 2024-3-2 14:19:47 | 显示全部楼层
回复 9# Batcher

谢谢大佬 已经上传到网盘了  链接:https://pan.baidu.com/s/1vD_bchzY56BEDdAXsaxTZg
提取码:yp9z
发表于 2024-3-2 14:23:04 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-3-2 14:46 编辑


自己模拟了一个样本测试环境,包括简单目录结构和复杂目录结构(如12楼示例),最终用以下代码(用记事本存为utf-8编码的test.bat运行即可)测试均予通过...

  1. @echo off
  2. ::若数据文件和本脚本文件是简中编码则删除下一行
  3. chcp 65001>nul&cls
  4. ::设置目标根目录如下
  5. set "rootD=D:\a"
  6. (for /f "delims=" %%F in (' dir /b/s/a-d "%rootD%\*.txt" ') do (
  7.         (find "此用户没有填写评价。" "%%~F") && (del /q "%%~F")
  8. ))>nul 2>nul
  9. (for /f "delims=" %%D in ('dir /b/s/ad "%rootD%"^|sort /r') do (rd /q "%%~D")) 2>nul
  10. exit/b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 05:44 , Processed in 0.022424 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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