Board logo

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

作者: thp2008    时间: 2021-3-21 17:42     标题: [已解决]批处理检测文件名,如果是变量.mp4就从文本文件中删除变量所在的行

本帖最后由 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 下载过程出错了,没有下载完成,这是下载过程中的临时文件。
所以不知道这种情况该如何处理。


感谢!
作者: Batcher    时间: 2021-3-21 19:59

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

作者: thp2008    时间: 2021-3-21 20:13

回复 2# Batcher


    非常感谢,终于搞定了。测试了一下,没有问题,有部分代码没看懂,没事,我再来学习一下您的代码!
作者: thp2008    时间: 2021-3-21 20:27

回复 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,一断全部都下载完成了,我就让它自动退出,不再循环了。
感谢您的帮助!
作者: Batcher    时间: 2021-3-21 20:40

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

作者: thp2008    时间: 2021-3-21 20:48

回复 5# Batcher


    再次表示感谢,测试没有问题!大神就是大神!




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