2

这是这种情况,我有一个目录,每个目录中有 10,000 个文件,命名如下:

文件名.XX0000.csv

文件名.XX9999.csv

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

文件名.XXX0000.csv

文件名.XXX9999.csv

文件名.XXXX0000.csv

文件名.XXXX9999.csv

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

无论如何,尽管所有目录都应该正好有 10,000 个文件,不多也不少。问题是有些丢失了,我需要知道哪些丢失了。

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

我什至把字符串序列弄乱了几个小时都无济于事。这些选项都不能很好地工作,第二个脚本接近但最终陷入无限循环,或者吐出确实存在的文件。

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

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

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

4

2 回答 2

6

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

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

为您的梦想世界:

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

编辑

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

set num=000%%N
set num=!num:~-4!
于 2012-07-18T12:09:02.463 回答
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%获取局部延迟变量。

于 2016-03-12T08:13:44.093 回答