Dateinamen Teilweise rückwärts auslesen und verschieben
Hallo zusammen,
ich bin neu im Forum und habe direkt eine Frage bzw. Aufgabe.
In einem Ordner "X" liegen Dateien z.B. B-VLE_255K_001123.svpj
Diese Dateien sollen verschoben werden in einen Unterordner von "Y"
Die letzten Zahlen im Dateinamen und zwar zwischen Extension ".svpj" und dem letzten Unterstrich "_" entsprechen dem Unterordner
(hier im Beispiel "001123").
Das Skript muss daher die Dateinamen auslesen und die Dateien dann in den jeweiligen Unterordner kopieren.
Hat hier jemand eine Idee?
Gruß,
Andi
ich bin neu im Forum und habe direkt eine Frage bzw. Aufgabe.
In einem Ordner "X" liegen Dateien z.B. B-VLE_255K_001123.svpj
Diese Dateien sollen verschoben werden in einen Unterordner von "Y"
Die letzten Zahlen im Dateinamen und zwar zwischen Extension ".svpj" und dem letzten Unterstrich "_" entsprechen dem Unterordner
(hier im Beispiel "001123").
Das Skript muss daher die Dateinamen auslesen und die Dateien dann in den jeweiligen Unterordner kopieren.
Hat hier jemand eine Idee?
Gruß,
Andi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 668968
Url: https://administrator.de/contentid/668968
Ausgedruckt am: 21.11.2024 um 12:11 Uhr
9 Kommentare
Neuester Kommentar
Warum nicht powershell ?
Copilot sagt :
Copilot sagt :
# Definiere die Quell- und Zielordner
$sourceFolder = "C:\Pfad\Zu\X"
$destinationFolder = "C:\Pfad\Zu\Y"
# Hole alle .svpj-Dateien im Quellordner
$files = Get-ChildItem -Path $sourceFolder -Filter "*.svpj"
foreach ($file in $files) {
# Extrahiere den Unterordnernamen aus dem Dateinamen
$folderName = $file.BaseName -replace '.*_(\d+)$', '$1'
# Erstelle den Zielordner, falls er nicht existiert
$targetFolder = Join-Path -Path $destinationFolder -ChildPath $folderName
if (-not (Test-Path -Path $targetFolder)) {
New-Item -Path $targetFolder -ItemType Directory
}
# Verschiebe die Datei in den Zielordner
Move-Item -Path $file.FullName -Destination $targetFolder
}
Write-Host "Dateien wurden erfolgreich verschoben."
Oder als PowerShell Einzeiler
Als Batch verwurstet
Get-ChildItem "D:\quelle" -File -Filter *.svpj | ?{$_.Basename -match '_(\d+)$'} | move-item -Destination {(new-Item -Type dir -Path (join-path 'D:\ziel' $matches[1]) -force).FullName}
@echo off
set "quelle=d:\quelle"
set "ziel=d:\ziel"
powerShell -EP Bypass -C "Get-ChildItem '%quelle%' -File -Filter *.svpj | ?{$_.Basename -match '_(\d+)$'} | move-item -Destination {(new-Item -Type dir -Path (join-path '%ziel%' $matches[1]) -force).FullName}"
Kann ich ein Skript explizit als Vertrauenswürdig kennzeichnen ohne die Einstellung umzuschreiben?
Siehe oben, Bypass Parameter beim Ausführen über die CMD setzen.Und wie immer lesenswert
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell ...