kresan
Goto Top

Dateinamen Teilweise rückwärts auslesen und verschieben

Hallo zusammen,
ich bin neu im Forum und habe direkt eine Frage face-smile 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

Content-ID: 668968

Url: https://administrator.de/forum/dateinamen-teilweise-rueckwaerts-auslesen-und-verschieben-668968.html

Ausgedruckt am: 24.12.2024 um 18:12 Uhr

chiefteddy
chiefteddy 23.10.2024 um 19:02:06 Uhr
Goto Top
Hallo,

JA

Und welchen Ansatz hast Du?

Jürgen

PS. Stichwort: Batch-Programm
kresan
kresan 23.10.2024 um 19:04:07 Uhr
Goto Top
Ja ich hatte ein ein Batch gedacht.
Aber keine Ahnung wie man das mit dem Auslesen des Dateinamens macht.
chiefteddy
chiefteddy 23.10.2024 um 19:12:20 Uhr
Goto Top
kresan
kresan 23.10.2024 um 19:35:31 Uhr
Goto Top
Hallo Jürgen,

schon mal vielen Dank.
Ich habe auch schon mal gefunden:

for /f "tokens=1-5 delims=_"

Ich verstehe hier, dass man nach dem Unterstich trennen kann.
Problem es gibt mehrere Unterstriche. Relevant ist nur der letzte.
Wie bekomme ich das dann in diese Schleife rein?
Delta9
Lösung Delta9 23.10.2024 um 20:21:04 Uhr
Goto Top
Warum nicht powershell ?

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."  
150704
Lösung 150704 23.10.2024 aktualisiert um 21:48:14 Uhr
Goto Top
Oder als PowerShell Einzeiler
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}  
Als Batch verwurstet
@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}"  
kresan
kresan 23.10.2024 um 22:02:50 Uhr
Goto Top
Hallo Delta9,

das Skript funktioniert!
Herzlichen Dank!
Problem ist aber, dass das Skript im Normalfall nicht ausgeführt werden darf.
D.h. auf meinem PC habe ich das kurzerhand gestattet aber in der Regel wird die Ausführung geblockt.
face-sad
Kann ich ein Skript explizit als Vertrauenswürdig kennzeichnen ohne die Einstellung umzuschreiben?
"Set-ExecutionPolicy RemoteSigned"?

Fehlermeldung war "...kann nicht geladen werden, da die Ausführung von Skripts auf diesem System
deaktiviert ist."
150704
150704 23.10.2024 aktualisiert um 22:15:41 Uhr
Goto Top
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 ...
kresan
kresan 23.10.2024 um 22:25:26 Uhr
Goto Top
Hi Ted555,

funktioniert!
Allen ein herzliches Dankeschön!