标题: [文本处理] [已解决]批处理检测文件名,如果是变量.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
现有一个批处理- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=2 delims==" %%a in (list.txt) do (
- set "str=%%a"
- dir /b | findstr/i !str!
- )
复制代码
批处理输出的结果:
********* -_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 - @echo off
- setlocal enabledelayedexpansion
- >"%temp%\list.txt.BatHome" type nul
- for /f "tokens=1-2 delims==" %%a in (list.txt) do (
- set "str=%%b"
- dir /b /a-d | findstr /i "!str!\.mp4$"
- if errorlevel 1 (
- >>"%temp%\list.txt.BatHome" echo %%a=%%b
- )
- )
- move /y "%temp%\list.txt.BatHome" "list.txt"
复制代码
作者: thp2008 时间: 2021-3-21 20:13
回复 2# Batcher
非常感谢,终于搞定了。测试了一下,没有问题,有部分代码没看懂,没事,我再来学习一下您的代码!
作者: thp2008 时间: 2021-3-21 20:27
回复 2# Batcher
另外,我想问下大神,比如下列代码- @echo off
- D:\Tools\gawk\gawk\gawk.exe "!a[$0]++" List.txt >ListQu.txt
- :down
- for /f "delims=" %%A in (ListQu.txt) do (
- echo.
- echo.
- echo down-dl.exe %%A
- down-dl.exe %%A
- )
- TIMEOUT /T 60 /NOBREAK
- goto down
复制代码
我这是个循环的批处理,但是我想里里面加一条,当检测到ListQu.txt里面的内容为空的时候,自动退出,加在TIMEOUT /T 60 /NOBREAK的上面一行,应该怎么加。
因为我用刚刚您写的上面那个批处理,也作了一个循环,不停的检测并更新ListQu.txt,一断全部都下载完成了,我就让它自动退出,不再循环了。
感谢您的帮助!
作者: Batcher 时间: 2021-3-21 20:40
回复 4# thp2008 - findstr "." "1.txt" >nul
- if errorlevel 1 (
- exit /b
- )
- timeout /t 60 /nobreak
复制代码
判断文件是否为空的几个方法:
1.bat- @echo off
- findstr "." "1.txt" >nul
- if errorlevel 1 (
- echo Empty
- ) else (
- echo Not empty
- )
- pause
复制代码
2.bat- @echo off
- for %%i in ("1.txt") do (
- if %%~zi equ 0 (
- echo Empty
- ) else (
- echo Not empty
- )
- )
- pause
复制代码
作者: thp2008 时间: 2021-3-21 20:48
回复 5# Batcher
再次表示感谢,测试没有问题!大神就是大神!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |