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