Board logo

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

作者: kissmylove    时间: 2024-3-1 14:41     标题: 【已解决】求BAT脚本删除文件夹下所有包含相同字符的TXT文件

本帖最后由 kissmylove 于 2024-3-3 12:54 编辑

举例 一个文件夹A下有很多子文件夹,每个子文件夹下包含1个TXT文本,有的文本内容是 刘德华唱歌真好听,有的内容是张学友唱歌真好听,现在想要批量删除文件夹A下所有内容是"张学友唱歌真好听"的TXT文本,删除后相对应的文件夹就会变为空文件夹,这些空文件夹也要删掉
求大佬们教下 要怎么做这个BAT
作者: czjt1234    时间: 2024-3-1 16:42

  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
复制代码

作者: aloha20200628    时间: 2024-3-1 17:03

回复 1# kissmylove

文件内容是abc和文件包含abc是两码事。楼主指的是...

作者: kissmylove    时间: 2024-3-1 17:12

回复 2# czjt1234


   大佬用了你的没有反应。。。。
作者: kissmylove    时间: 2024-3-1 17:13

回复 3# aloha20200628
文件内容是纯中文加一个句号
作者: aloha20200628    时间: 2024-3-1 18:12

本帖最后由 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. )
复制代码

作者: aloha20200628    时间: 2024-3-1 19:09

本帖最后由 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. )
复制代码

作者: 77七    时间: 2024-3-1 20:48

回复 4# kissmylove


   你的文本是什么编码格式?如果是utf-8,将2楼代码保存为utf-8编码,代码开头加 chcp 65001
作者: Batcher    时间: 2024-3-1 22:35

回复 1# kissmylove


    请把测试用的“文件夹A”打包压缩上传到网盘,我试试。
作者: kissmylove    时间: 2024-3-2 08:46

回复 9# Batcher


    哥哥 网盘在哪里呀 是哪个网盘
作者: czjt1234    时间: 2024-3-2 09:44

本帖最后由 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
复制代码

作者: aloha20200628    时间: 2024-3-2 12:05

本帖最后由 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. )
复制代码

作者: Batcher    时间: 2024-3-2 12:20

回复 10# kissmylove


百度:https://pan.baidu.com
蓝奏:https://www.lanzou.com
腾讯:https://www.weiyun.com 需要登录才能下载
阿里:https://www.aliyundrive.com 需要登录才能下载
作者: kissmylove    时间: 2024-3-2 14:19

回复 9# Batcher

谢谢大佬 已经上传到网盘了  链接:https://pan.baidu.com/s/1vD_bchzY56BEDdAXsaxTZg
提取码:yp9z
作者: aloha20200628    时间: 2024-3-2 14:23

本帖最后由 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
复制代码

作者: ppll2030    时间: 2024-3-2 17:14

回复 14# kissmylove


    根据你压缩包的样本,请把下面代码保存为utf-8编码的bat文件。
注意:运行找到关键字即刻删除该文件夹和文件。操作前请做好相关备份。
  1. @echo off
  2. chcp 65001
  3. for /f "delims=" %%i in ('dir /s /b *.txt') do (
  4. find "此用户没有填写评价" "%%i" >nul && rd /s /q "%%~dpi"
  5. )
复制代码

作者: kissmylove    时间: 2024-3-3 12:54

回复 15# aloha20200628

按照你的 已经解决了 谢谢大佬




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2