在这种情况下,我的目录在每个目录中都有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。
由于这是我的第一篇文章,我希望通过创建一个新主题来正确地做到这一点,我打算将我的问题添加到上一个主题,直到我在帖子框中看到“但是避免......”!
答案 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%
来获取本地延迟变量。