dos批处理文件找到缺少的顺序文件名

时间:2012-07-18 11:47:14

标签: batch-file

在这种情况下,我的目录在每个目录中都有10,000个文件,名称如下:

FileName.XX0000.csv

FileName.XX9999.csv

文件名本身的大小可以改变,即:

FileName.XXX0000.csv

FileName.XXX9999.csv

FileName.XXXX0000.csv

FileName.XXXX9999.csv

如果X是另一个父母编号,但无论如何都应忽略这些编号。

尽管所有目录都应该准确地存在10,000个文件,但不能少。问题是有些缺失,我需要知道哪些缺失。

我试过这篇文章中的脚本: batch script to find missing sequence no

我甚至乱了几个小时的字符串sequnce无济于事。这两个选项都不能很好地工作,第二个脚本接近但最终会无限循环,或者吐出存在的文件。

我需要提出一个解决方案,很容易告诉我哪些数字或文件名丢失了。在我的梦想世界中,我会喜欢一个脚本,我可以将它放在父目录中,它会遍历所有子目录并打印丢失的单个文件。

最好不要告诉脚本文件名的开头部分是什么,因为理论上它应该只是查看最后四个数字是否存在于0000-9999。

由于这是我的第一篇文章,我希望通过创建一个新主题来正确地做到这一点,我打算将我的问题添加到上一个主题,直到我在帖子框中看到“但是避免......”!

2 个答案:

答案 0 :(得分:6)

让我们看看你是否可以写一些代码。

  • FOR /L可以从0到9999
  • 计算
  • IF NOT EXIST可以测试文件是否缺失,并且它支持通配符。
  • >>>可以将输出重定向到文件

为了你的梦想世界:

  • FOR /D /R %%F IN (.)将迭代整个文件夹层次结构

修改

您可能需要左键填充一个带零的数字,以便宽度始终为4位数。由于这可能在一个循环内,您将需要使用延迟扩展。假设%% N是一个包含数字的FOR变量。

set num=000%%N
set num=!num:~-4!

答案 1 :(得分:1)

这是一个脚本,它将以连续的顺序找到所有丢失的文件:

@echo off

setlocal ENABLEDELAYEDEXPANSION
set max=1208
set cnt=0

for /L %%f in (0,1,%max%) do (
    set "num=00000%%f"    
    set "num=!num:~-4!"
    if not exist "img!num!.png" (
        echo img!num!.png
        set /A "cnt=!cnt!+1"
    )
) 
echo NUMBER MISSING: !cnt!

endlocal

请注意,您需要使用!x!代替%x%来获取本地延迟变量。