Powershell: Dateinamen mit fortlaufender Nummer umbennen bzw. ergänzen und in neuen Pfad verschieben
Guten Morgen Powershell-Administratoren.
Guten Morgen Batch-Administratoren.
Folgende Anforderung ist aufgetaucht:
Ein Programm legt in einem Ordner PDF Dateien ab, keine festen Zeiten, "so wie es halt kommt".
Die Datei muss umbenannt werden, z.B. von DATA.pdf in DATA_1000.pdf.
DATA_1000.pdf muss dann in einen anderen Ordner verschoben werden.
Gibt es hierfür eine zuverlässiges Script/Batch?
Oder ggf. sogar ein Programm welches die zuverlässig erledigt?
Vielen Dank und einen leckeren Kaffee
!
Guten Morgen Batch-Administratoren.
Folgende Anforderung ist aufgetaucht:
Ein Programm legt in einem Ordner PDF Dateien ab, keine festen Zeiten, "so wie es halt kommt".
Die Datei muss umbenannt werden, z.B. von DATA.pdf in DATA_1000.pdf.
DATA_1000.pdf muss dann in einen anderen Ordner verschoben werden.
- Die 1000 steht hier für eine fortlaufende Nummer.
- Es darf nie die gleiche fortlaufende Nummer verwendet werden.
- Der PC Neustart mit dem Script muss jederzeit neu gestartet werden dürfen.
- Das Script muss durchlaufen, optimal per Monitoring kontrolliert.
- Der Vorgang darf nicht kollidieren, z.B. große PDF Datei kommt rein, Script versucht schon während des Eingangs eine Verarbeitung.
Gibt es hierfür eine zuverlässiges Script/Batch?
Oder ggf. sogar ein Programm welches die zuverlässig erledigt?
Vielen Dank und einen leckeren Kaffee
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 619365
Url: https://administrator.de/forum/powershell-dateinamen-mit-fortlaufender-nummer-umbennen-bzw-ergaenzen-und-in-neuen-pfad-verschieben-619365.html
Ausgedruckt am: 31.03.2025 um 10:03 Uhr
4 Kommentare
Neuester Kommentar

$quelle = 'd:\quelle'
$ziel = 'd:\ziel'
$num = ls $ziel -file | ?{$_.Basename -match '\d+$'} | %{[int]$matches} | sort -Desc | select -f 1
ls $quelle -file | %{$num++;mv $_.Fullname -Destination "$ziel\$($_.Basename)_$num$($_.Extension)" -verbose}

Joa, wenn man die Anforderungen nicht passend schreibt kann es nie zum gewünschten Ergebnis kommen.
Kann man die fortlaufende Nummer variable nach Startpunkt eingeben?
Klar,Ich hab die Anforderung nochmal nachgebessert.
Wunschkonzert ...$quelle = 'D:\quelle'
$ziel = 'D:\ziel'
$filter = '*.pdf'
$numlog = "$PSScriptRoot\num.log"
if (Test-Path $numlog){
$num = [int](gc $numlog -TotalCount 1)
}else{
$num = 1000
}
write-host "Waiting for files with Extension $filter in folder '$quelle' ..."
while($true){
ls $quelle -file -filter $filter | %{
$num++
$dFile = "$ziel\$($_.Basename)_$num$($_.Extension)"
while(Test-Path $dFile){
$num++
$dFile = "$ziel\$($_.Basename)_$num$($_.Extension)"
}
$fs = $null
try{
$fs = (New-Object System.IO.FileInfo $_.FullName).OpenWrite()
$fs.Close(); $fs.Dispose()
mv $_.Fullname -Destination $dFile -verbose
$num | sc $numlog
}catch{}finally{
if($fs){
$fs.Close(); $fs.Dispose()
}
}
}
sleep 10
}