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

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

TOP

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

TOP

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

TOP

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

TOP

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

TOP

返回列表