Dateinamen zerlegen und Datei anhand dreier Kriterien verschieben
Hallo Community,
ich habe eine Frage zum Zerlegen eines Dateinamens in verschiedene Strings und dem anschließenden verschieben der Datei.
Ich habe PDF Dateien die wie folgt aufgebaut sind:
LS1-BE17-300026.pdf
RG2-BE18-300100.pdf
RG1-RP17-600124.pdf
DOK2-AN18-101074.pdf
Wichtig an dem Namen ist nur der mittlere und der letzte Teil da die Dokumente in verschiedene Ordner geschoben werden sollen.
Die Ordnerstruktur sieht wie folgt aus:
Ordner Angebote (Dokumente mit AN im zweiten Token)
...2017
... 2018
101074
...2019
...
Ordner Bestellungen (Dokumente mit BE im zweiten Token)
...2017
300026
...2018
300100
...2019
...
Ordner Reparaturen (Dokumente mit RP im zweiten Token)
...2017
600124
...2018
...2019
...
Jetzt sollen die PDF Dateien anhand Ihres Namens in die Ordner verschoben werden.
Im mittleren Teil der PDF zeigen die ersten beiden Buchstaben die erste Ordnerstruktur, die nächsten beiden Zahlen den Ordner mit der Jahreszahl und der letzte Teil des Dateinamens den endgültigen Zielordner.
Vorher war meine Ordnerstruktur etwas einfacher, da habe ich folgende Code benutzt:
Wie kann ich diesen Code jetzt weiter aufdröseln und auf die neue Situation anpassen bzw. speziell den Token in der Mitte in 2 Teile auflösen? Im Prinzip muss die Schleife ja 2 Abfragen durchlaufen. Einmal nachdem der erste Teil ausgelesen wurde und dann nach dem auslesen des zweiten Teils.
Danke schon einmal für eure Hilfe, Speedz
ich habe eine Frage zum Zerlegen eines Dateinamens in verschiedene Strings und dem anschließenden verschieben der Datei.
Ich habe PDF Dateien die wie folgt aufgebaut sind:
LS1-BE17-300026.pdf
RG2-BE18-300100.pdf
RG1-RP17-600124.pdf
DOK2-AN18-101074.pdf
Wichtig an dem Namen ist nur der mittlere und der letzte Teil da die Dokumente in verschiedene Ordner geschoben werden sollen.
Die Ordnerstruktur sieht wie folgt aus:
Ordner Angebote (Dokumente mit AN im zweiten Token)
...2017
... 2018
101074
...2019
...
Ordner Bestellungen (Dokumente mit BE im zweiten Token)
...2017
300026
...2018
300100
...2019
...
Ordner Reparaturen (Dokumente mit RP im zweiten Token)
...2017
600124
...2018
...2019
...
Jetzt sollen die PDF Dateien anhand Ihres Namens in die Ordner verschoben werden.
Im mittleren Teil der PDF zeigen die ersten beiden Buchstaben die erste Ordnerstruktur, die nächsten beiden Zahlen den Ordner mit der Jahreszahl und der letzte Teil des Dateinamens den endgültigen Zielordner.
Vorher war meine Ordnerstruktur etwas einfacher, da habe ich folgende Code benutzt:
pushd "%PfadServer%\%Scanverzeichnis%"
FOR /F "delims=" %%i in ('dir /b/a-d "*"') do (
FOR /F "tokens=3 delims=-." %%a in ("%%i") do (
md "%Dokumentenablage%\%%a" 2>nul
move "*%%a*.*" "%Dokumentenablage%\%%a"
)
)
Wie kann ich diesen Code jetzt weiter aufdröseln und auf die neue Situation anpassen bzw. speziell den Token in der Mitte in 2 Teile auflösen? Im Prinzip muss die Schleife ja 2 Abfragen durchlaufen. Einmal nachdem der erste Teil ausgelesen wurde und dann nach dem auslesen des zweiten Teils.
Danke schon einmal für eure Hilfe, Speedz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 372302
Url: https://administrator.de/contentid/372302
Ausgedruckt am: 26.11.2024 um 03:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo Speedz,
damit solltest Du die Aufgabe lösen können.
Batch
Ausgabe
Gruß Frank
damit solltest Du die Aufgabe lösen können.
Batch
@echo off
setlocal EnableDelayedExpansion
FOR /F "delims=" %%i in ('dir /b/a-d "*.pdf"') do (
FOR /F "tokens=2,3 delims=-." %%a in ("%%i") do (
set typ=%%a
set typ=!typ:~0,2!
set jahr=%%a
set jahr=20!jahr:~2,2!
set name=%%b
echo Mach was damit: !typ! !jahr! !name!
)
)
Ausgabe
Mach was damit: AN 2018 101074
Mach was damit: BE 2017 300026
Mach was damit: RP 2017 600124
Mach was damit: BE 2018 300100
Gruß Frank
Oder du machst es mit der Powershell:
gci 'D:\Ordner\*.pdf' -File | group {$_.Name.Split('-')[1].Substring(0,2)} | %{
$targetfolder = ''
switch ($_.Name){
'RP' {$targetfolder = 'D:\Reparaturen' }
'BE' {$targetfolder = 'D:\Bestellungen'}
'AN' {$targetfolder = 'D:\Angebote'}
}
$_.Group | %{
$parts = $_.Basename.Split('-')
$folder = "$targetfolder\20$($parts[1].Substring(2,2))\$($parts[2])"
if(!(Test-Path $folder)){md $folder -Force | out-null}
$_ | move-item -destination $folder -verbose
}
}
Hier ein Vorschlag wie man es in PowerShell machen könnte
(Ich bin kein Profi in RegEx, für deine mitgegebenen Dateinamensbeispiele funktioniert es, aber kann sein das es zu unerwarteten fehlern kommt falls die Dateinamen arg anders sind )
(Ich bin kein Profi in RegEx, für deine mitgegebenen Dateinamensbeispiele funktioniert es, aber kann sein das es zu unerwarteten fehlern kommt falls die Dateinamen arg anders sind )
$Input = Get-ChildItem -Filter *.pdf
foreach ($pdf in $Input) {
#Mit RegEx Checken was zwischen den Bindestrichen steht
$null = $pdf -match '\-(.*?)\-'
$MiddlePart = $Matches.1
#Mit RegEx Checken nach dem Bindestrich an Zahlen steht
$null = $pdf -match '\-(\d+).'
$EndPart = $Matches.1
#die Mittelteile in Ordernamen übersetzen
if ($MiddlePart.Remove(2) -like "AN" ) {
$Ordner = "Angebote"
}
elseif ($MiddlePart.Remove(2) -like "BE" ) {
$Ordner = "Bestellungen"
}
elseif ($MiddlePart.Remove(2) -like "RP" ) {
$Ordner = "Reparaturen"
}
#Zielpfad basteln
$Jahr = $MiddlePart.Substring(2)
$Destination = ".\$Ordner\20$Jahr\$EndPart\"
#Ordner erstellen (bzw. fehlermeldung unterdrücken falls es den schon gibt)
New-Item -ItemType Directory -Path $Destination -ErrorAction SilentlyContinue
#Move to appropriate Folder
Move-Item $pdf -Destination $Destination
}