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

[文本处理] [已解决]批处理检测文件名,如果是变量.mp4就从文本文件中删除变量所在的行

[复制链接]
发表于 2021-3-21 17:42:34 | 显示全部楼层 |阅读模式
本帖最后由 thp2008 于 2021-3-21 20:18 编辑

文件文件的内容如下:
list.txt
abc=1a9b3c4d5e6f7g8h2
abc=2a3b6c4d5e6f7g8h1
abc=3a1b3c4d5e6f7g8h6
abc=4a4b2c4d5e6f7g8h3
abc=5a9b1c4d5e6f7g8h7
abc=6a4b9c4d5e6f7g8h4
abc=7a9b8c4d5e6f7g8h5

现有一个批处理
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims==" %%a in (list.txt) do (
  4.     set "str=%%a"
  5.     dir /b | findstr/i !str!
  6. )
复制代码
批处理输出的结果:
********* -_1a9b3c4d5e6f7g8h2.mp4
********* -_2a3b6c4d5e6f7g8h1.mp4.part
********* -_3a1b3c4d5e6f7g8h6.mp4
********* -_4a4b2c4d5e6f7g8h3.mp4
********* -_5a9b1c4d5e6f7g8h7.mp4.part
********* -_6a4b9c4d5e6f7g8h4.mp4
********* -_7a9b8c4d5e6f7g8h5.mp4

我想要修改一下这个批处理,
增加1个小功能:
添加一个检测输出结果的文件名的扩展名。
如果文件名的结尾是 !str!.mp4 就从List.txt 中,删除!str!变量所在的行。
如果文件名的结尾是 !str!.mp4.part 就不做任何处理。我本想只检测 !str!.mp4这个关键字的,
但是发现 !str!.mp4.part也包含这个字符串,也就是先要检测包含!str!.mp4,但又不能包含.mp4.part
如果文件名仅仅是!str!.mp4就表示也经下载完成了。
如果文件名是 !str!.mp4.part 下载过程出错了,没有下载完成,这是下载过程中的临时文件。
所以不知道这种情况该如何处理。


感谢!
发表于 2021-3-21 19:59:49 | 显示全部楼层
回复 1# thp2008
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. >"%temp%\list.txt.BatHome" type nul
  4. for /f "tokens=1-2 delims==" %%a in (list.txt) do (
  5.     set "str=%%b"
  6.     dir /b /a-d | findstr /i "!str!\.mp4$"
  7.     if errorlevel 1 (
  8.         >>"%temp%\list.txt.BatHome" echo %%a=%%b
  9.     )
  10. )
  11. move /y "%temp%\list.txt.BatHome" "list.txt"
复制代码

评分

参与人数 1技术 +1 收起 理由
thp2008 + 1 完全满足

查看全部评分

 楼主| 发表于 2021-3-21 20:13:47 | 显示全部楼层
回复 2# Batcher


    非常感谢,终于搞定了。测试了一下,没有问题,有部分代码没看懂,没事,我再来学习一下您的代码!
 楼主| 发表于 2021-3-21 20:27:25 | 显示全部楼层
回复 2# Batcher

另外,我想问下大神,比如下列代码
  1. @echo off
  2. D:\Tools\gawk\gawk\gawk.exe "!a[$0]++" List.txt >ListQu.txt
  3. :down
  4. for /f "delims=" %%A in (ListQu.txt)  do  (
  5. echo.
  6. echo.
  7.   echo down-dl.exe  %%A
  8.   down-dl.exe  %%A
  9. )
  10. TIMEOUT /T 60 /NOBREAK
  11. goto down
复制代码
我这是个循环的批处理,但是我想里里面加一条,当检测到ListQu.txt里面的内容为空的时候,自动退出,加在TIMEOUT /T 60 /NOBREAK的上面一行,应该怎么加。
因为我用刚刚您写的上面那个批处理,也作了一个循环,不停的检测并更新ListQu.txt,一断全部都下载完成了,我就让它自动退出,不再循环了。
感谢您的帮助!
发表于 2021-3-21 20:40:24 | 显示全部楼层
回复 4# thp2008
  1. findstr "." "1.txt" >nul
  2. if errorlevel 1 (
  3.     exit /b
  4. )
  5. timeout /t 60 /nobreak
复制代码
判断文件是否为空的几个方法:

1.bat
  1. @echo off
  2. findstr "." "1.txt" >nul
  3. if errorlevel 1 (
  4.     echo Empty
  5. ) else (
  6.     echo Not empty
  7. )
  8. pause
复制代码
2.bat
  1. @echo off
  2. for %%i in ("1.txt") do (
  3.     if %%~zi equ 0 (
  4.         echo Empty
  5.     ) else (
  6.         echo Not empty
  7.     )
  8. )
  9. pause
复制代码
 楼主| 发表于 2021-3-21 20:48:17 | 显示全部楼层
回复 5# Batcher


    再次表示感谢,测试没有问题!大神就是大神!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 13:24 , Processed in 0.018226 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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