Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 检查连续数字文件名中的错误_Batch File_Cmd_Filenames - Fatal编程技术网

Batch file 检查连续数字文件名中的错误

Batch file 检查连续数字文件名中的错误,batch-file,cmd,filenames,Batch File,Cmd,Filenames,我迫切需要某种工具,可以让我检查并列出一批连续编号的文件名中缺少的文件。 我的文件名为: 例如,FP_0000001.tif、FP_0000002.tif、FP_0000003.tif等等,最多可达FP_0006543.tif 问题是,当我检查文件夹中的文件数量时,它会告诉我只有6500个文件,所以我知道有43个丢失的文件,但我不知道到底是哪些文件 在网上搜索时,我发现这个帖子有一个类似的问题: 但是,这是针对Linux的。使用Windows是否可以运行类似的操作 提前感谢您的帮助!希望我说清楚

我迫切需要某种工具,可以让我检查并列出一批连续编号的文件名中缺少的文件。 我的文件名为:

例如,FP_0000001.tif、FP_0000002.tif、FP_0000003.tif等等,最多可达FP_0006543.tif

问题是,当我检查文件夹中的文件数量时,它会告诉我只有6500个文件,所以我知道有43个丢失的文件,但我不知道到底是哪些文件

在网上搜索时,我发现这个帖子有一个类似的问题:

但是,这是针对Linux的。使用Windows是否可以运行类似的操作


提前感谢您的帮助!希望我说清楚。英语不是我的母语

您可以在Windows上安装bash并运行原始脚本,而不是将bash Linux解决方案移植到cmd Windows,请参见


在Windows 10周年更新上,第三个选项是启用Linux子系统并以本机方式运行bash。

您可以在Windows上安装bash并运行原始脚本,而不是将bash Linux解决方案移植到cmd Windows


在Windows 10周年更新上,第三个选项是启用Linux子系统并以本机方式运行bash。

这很容易做到,因此它可以使用PowerShell在Linux、Mac和Windows上运行。如果您使用的是受支持的Windows系统,则PowerShell可用。Linux、Mac和Windows可以从

==Find-MissingFiles.ps1

$BaseDir = 'C:/src/t/fp'
$FilenameFormat = 'FP_{0:0000000}.tif'

$UsedList = @()
Get-ChildItem -File -Path $BaseDir -Filter 'FP_*.tif' |
    ForEach-Object {
        if ($_.Name -match '^FP_(\d*)\.tif$') {
            $UsedList += [int]$Matches[1]
        }
    }

for ($i = 1; $i -lt $UsedList.Count; $i++) {
    if ($UsedList[$i] -ne ($UsedList[$i - 1] + 1)) {
        $MissingList = @(($UsedList[$i-1] + 1)..($UsedList[$i] - 1))
        foreach ($item in $MissingList) {
            "Missing $($FilenameFormat -f $item)"
        }
    }
}
如果必须从.bat脚本文件运行,则可以使用此脚本

powershell -NoLogo -NoProfile -File '.\Find-MissingFiles.ps1'
如果到达PowerShell Core 6或7,请使用:

pwsh -NoLogo -NoProfile -File '.\Find-MissingFiles.ps1'

这很容易做到,因此它可以在Linux、Mac和Windows上使用PowerShell运行。如果您使用的是受支持的Windows系统,则PowerShell可用。Linux、Mac和Windows可以从

==Find-MissingFiles.ps1

$BaseDir = 'C:/src/t/fp'
$FilenameFormat = 'FP_{0:0000000}.tif'

$UsedList = @()
Get-ChildItem -File -Path $BaseDir -Filter 'FP_*.tif' |
    ForEach-Object {
        if ($_.Name -match '^FP_(\d*)\.tif$') {
            $UsedList += [int]$Matches[1]
        }
    }

for ($i = 1; $i -lt $UsedList.Count; $i++) {
    if ($UsedList[$i] -ne ($UsedList[$i - 1] + 1)) {
        $MissingList = @(($UsedList[$i-1] + 1)..($UsedList[$i] - 1))
        foreach ($item in $MissingList) {
            "Missing $($FilenameFormat -f $item)"
        }
    }
}
如果必须从.bat脚本文件运行,则可以使用此脚本

powershell -NoLogo -NoProfile -File '.\Find-MissingFiles.ps1'
如果到达PowerShell Core 6或7,请使用:

pwsh -NoLogo -NoProfile -File '.\Find-MissingFiles.ps1'

此批处理文件执行您想要的操作:

@echo off
setlocal EnableDelayedExpansion

set "i=10000000"
for /F %%f in ('dir /O:N /B FP_*.tif') do (
   set /A i+=1
   if /I "%%f" neq "FP_!i:~1!.tif" call :ShowMissingFiles "%%f"
)
goto :EOF


:ShowMissingFiles file
if /I "%~1" equ "FP_%i:~1%.tif" exit /B
echo "FP_%i:~1%.tif" missing
set /A i+=1
goto :ShowMissingFiles

此批处理文件执行您想要的操作:

@echo off
setlocal EnableDelayedExpansion

set "i=10000000"
for /F %%f in ('dir /O:N /B FP_*.tif') do (
   set /A i+=1
   if /I "%%f" neq "FP_!i:~1!.tif" call :ShowMissingFiles "%%f"
)
goto :EOF


:ShowMissingFiles file
if /I "%~1" equ "FP_%i:~1%.tif" exit /B
echo "FP_%i:~1%.tif" missing
set /A i+=1
goto :ShowMissingFiles