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

[文本处理] [已解决]求个批处理:查找不连续的txt文件名

[复制链接]
发表于 2025-6-24 17:46:03 | 显示全部楼层 |阅读模式
本帖最后由 滴血雄鹰 于 2025-6-24 21:11 编辑

下载的文件4000个以上(4000为不定数,最多甚至有10000个)文件,命名为1.txt至4000.txt。
由于不知名的原因,会漏下载其中的一些txt文件。因为文件太多,一个个查找遗漏下载的txt十分不便,
希望能有个能查找到遗漏下载的txt的文件名,并将其结果输出到list.txt中,方便对应下载。

思路:
因为最大数的txt是不定的,可以先找到temp文件夹中最大的txt文件名数值,再找出1到最大数值的txt中不连续的txt文件名,并输出到list.txt中。
一般文件数在4000至10000,不知道bat处理会不会慢些,如有vbs代码最好。

谢谢!

找到一个VBS代码,可以用,但要修改下。就是数量4000改成判断变量,然后结果输出到list.txt中,不需要一个个窗口显示。

Dim fs, k
Dim name
set fs = CreateObject("Scripting.FileSystemObject")
for k=1 to 4000 step 1
if len(k)=1 then name="00" & k & ".txt"
if len(k)=2 then name="0" & k & ".txt"
if len(k)=3 then name=k & ".txt"
If fs.FileExists( createobject("Scripting.FileSystemObject").GetFolder(".").Path & "\" & name) Then
Else
msgbox("不存在" & createobject("Scripting.FileSystemObject").GetFolder(".").Path & "\" & name)
End If
Next

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2025-6-24 19:10:54 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-6-24 20:53 编辑

回复 1# 滴血雄鹰

以下代码存为 test.bat 运行,与被处理文件 *.txt 同目录,sort76.exe (即 sort.exe v7.6 版 http://bcn.bathome.net/s/tool/index.html?key=sort)可从本坛第三方下载,落地即用,与被处理文件 *.txt 同目录...

  1. @echo off &setlocal enabledelayedexpansion &set "n=1"
  2. dir /b/a-d "*.txt"|findstr /irxc:"[0-9][0-9]*\.txt"|sort76 -t "." -n>$.#
  3. (for /f "delims=" %%F in ($.#) do if %%~nF equ !n! (set/a "n+=1") else set/a "x=%%~nF-1" &(for /l %%i in (!n!,1,!x!) do echo,%%i) &set/a "n=1+%%~nF")>list.txt
  4. del /q "$.#" &type "list.txt" &pause&exit/b
复制代码
 楼主| 发表于 2025-6-24 19:41:17 | 显示全部楼层
回复 2# aloha20200628


    能用,谢谢!
发表于 2025-6-24 19:50:54 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-6-24 20:24 编辑

回复 3# 滴血雄鹰

如果被处理文件 *.txt 少于8000个,可用以下批处代码,不必下载调用 sort76.exe ...

  1. @echo off &setlocal enabledelayedexpansion &del /q "list.txt" 2>nul &dir /b/a-d "*.txt">$.# &set "nmax=1"
  2. for /f "delims=" %%F in ($.#) do set "_#%%~nF=1" &if %%~nF gtr !nmax! set "nmax=%%~nF"
  3. (for /l %%n in (1,1,!nmax!) do if not defined _#%%n echo,%%n)>list.txt
  4. del /q "$.#" &type "list.txt" &pause&exit/b
复制代码
 楼主| 发表于 2025-6-24 19:59:52 | 显示全部楼层
回复  滴血雄鹰

如果被处理文件 *.txt 少于8000个,可用以下批处代码,不必下载调用 sort76.exe ...
aloha20200628 发表于 2025-6-24 19:50



    试了下,输出list.txt空白
发表于 2025-6-24 20:27:43 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-6-24 20:35 编辑

回复 5# 滴血雄鹰

估计是运行4楼代码前未删除遗留的 list.txt 所致。现已订正了4楼代码,第一行须先删除 list.txt 即可,要确保当前目录下只有 1.txt, 2.txt, ..., n.txt 这类纯数字命名格式的 *.txt 文件
 楼主| 发表于 2025-6-24 20:45:08 | 显示全部楼层
回复  滴血雄鹰

估计是运行4楼代码前未删除遗留的 list.txt 所致。现已订正了4楼代码,第一行须先删除  ...
aloha20200628 发表于 2025-6-24 20:27



    对的,刚才文件夹中有不是数字的文件。
发表于 2025-6-24 20:50:02 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-6-24 20:58 编辑

回复 7# 滴血雄鹰

再给一个加强版吧(顺便也加强了2楼代码),先用 findstr 过滤掉所有非数字命名格式的 *.txt 再开工就是了...

  1. @echo off &dir /b/a-d "*.txt"|findstr /irxc:"[0-9][0-9]*\.txt">"$.#"
  2. setlocal enabledelayedexpansion &set "nmax=1"
  3. for /f "delims=" %%F in ($.#) do set "_#%%~nF=1" &if %%~nF gtr !nmax! set "nmax=%%~nF"
  4. (for /l %%n in (1,1,!nmax!) do if not defined _#%%n echo,%%n)>list.txt
  5. del /q "$.#" &type "list.txt" &pause&exit/b
复制代码

评分

参与人数 1技术 +1 收起 理由
滴血雄鹰 + 1 有效,谢谢!

查看全部评分

发表于 2025-6-24 21:40:43 | 显示全部楼层
本帖最后由 77七 于 2025-6-24 21:42 编辑
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=" %%a in ('dir /b /a-d *.txt ^|findstr /rxic:"[0-9][0-9]*\.txt" ^|find /c /v ""') do (
  4.         set n=%%a
  5. )
  6. (for /l %%l in (1,1,20000) do (
  7.         if exist "%%l.txt" (
  8.                 set /a "1/(n-(m+=1))" 2>nul
  9.                 if errorlevel 1 (
  10.                         goto :next
  11.                 )
  12.         ) else (
  13.                 echo %%l.txt
  14.         )
  15. )) > list.log
  16. :next
  17. pause

复制代码
发表于 2025-6-24 22:13:11 | 显示全部楼层
除了1.txt至xxxxxxx.txt这些文件外 ,其余文件不能包含数字

  1. @set @do_not_save_as_utf8=1;/*&echo off

  2. dir /b *.txt|cscript //nologo //e:jscript "%~f0" 1 >miss_list.txt

  3. echo done&pause&exit /b 0 */

  4. if (!WScript.Arguments.Length){WScript.Quit();}
  5. var a=WScript.StdIn.ReadAll()
  6. a=a?a.match(/[1-9]\d*/g):[];
  7. var b=[]
  8. var s=a.length;
  9. for(var i=0;i<s;i++)b[a[i]]=1;
  10. s=b.length;
  11. for(var i=1;i<s;i++){
  12. if(!b[i])WScript.Echo(''+i+'.txt');
  13. }
复制代码
发表于 2025-6-25 14:43:13 | 显示全部楼层
免去9楼的计数
  1. @echo off
  2. cd /d "%~dp0"
  3. (for /l %%l in (20000,-1,1) do (
  4.         if exist "%%l.txt" (
  5.                 set m=1
  6.         ) else if defined m (
  7.                 echo %%l.txt
  8.         )
  9. )) > list.log
  10. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:05 , Processed in 0.031022 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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