franky89
Goto Top

Nummerierte dateien lücke finden .batch

hallo zusammen face-smile
ich habe eine Vielzahl an Dateien mit Messwerten die folgender maßen aussehen:

xxxx0001_000.txt
xxxx0002_000.txt
xxxx0003_000.txt
xxxx0004_000.txt
xxxx0004_001.txt
xxxx0005_000.txt
.(lücke)
xxxx0010_000.txt
.
xxxx1000_000.txt

Es können Dateien doppelt vorkommen:
xxxx0004_000.txt
xxxx0004_001.txt
Baugruppe wurde zweimal getestet


Nun möchte ich gerne per Batch Datei Lücken in der Reihe angezeigt bekommen.

Abfrage: Anfangswert
z.B xxxx0001

Abfrage: Endwert
z.B xxxx1000

Ausgabe:
xxxx0006
xxxx0007
xxxx0008
xxxx0009

kann mir jemand behilflich sein?

Vielen Dank schon mal face-smile

Content-Key: 334007

Url: https://administrator.de/contentid/334007

Printed on: April 19, 2024 at 04:04 o'clock

Member: colinardo
colinardo Apr 04, 2017 updated at 11:59:08 (UTC)
Goto Top
Servus,
Batchdatei bspw. speichern unter check.cmd
@echo off & setlocal ENABLEDELAYEDEXPANSION
set "folder=%~3" &set "von=%~2" &set "bis=%~3"  
set /a "start=1%von:~-4%,start - 10000"  
set /a "stop=1%bis:~-4%,stop - 10000"  
for /L %%a in (%start% 1 %stop%) do (
	set num=000%%a
	set "file=%von:~0,-4%!num:~-4!"  
	if not exist "%folder%\!file!*" echo !file!  
)
und dann mit folgenden Parametern das Skript aufrufen:
check.cmd "D:\Ordner\Mit\Messwerten" "xxxx0002" "xxxx0200"
Und für die Powershell Kollegen:
param([string]$folder,[string]$prefix,[int]$from,[int]$to)
$from..$to | ?{!(Test-Path "$folder\$prefix$('{0:D4}' -f $_)*.txt")} |%{"$prefix$('{0:D4}' -f $_)"}  
Aufruf dann so:
.\script.ps1 -folder "D:\Ordner\Mit\Messwerten" -prefix "xxxx" -from 5 -to 20  
Grüße Uwe
Member: SeriousEE
SeriousEE Apr 04, 2017 updated at 11:55:13 (UTC)
Goto Top
Hallo,

habe zur Problemstellung etwas probiert in Powershell. Allerdings kein Gewähr auf Performance.

$files = Get-ChildItem "C:\<pfad>\"  
$start = 1
$end = 1000
$arr = @()

foreach ($file in $files) {
   $filename = $file.Name.Split("_")  
   $arr += $filename
}
$uniqarr = $arr | Get-Unique
$searchstrbase = $uniqarr.Substring(0, $uniqarr.Length-1)

for ($i = $start; $i -lt $end; $i++) {

    $searchstr = $searchstrbase + $i
    if (!$uniqarr.Contains($searchstr)) {
      Write-Host $searchstr
   }
}