Dateien nach zweiter Stelle nach erstem Punkt im Dateinamen verschieben
Hallo Administratoren,
ich stehe vor folgender Problemstellung:
Ich benötige eine Batch-Datei, die Dateien aus einem bestimmten Ordner nach der zweiten Stelle nach dem ersten Punkt in ihrem Dateinamen in entsprechende Ordner sortiert.
Also zum Beispiel:
In C:\Unsortiert liegen die Dateien
ABCDEF.X1234.pdf
FGHIJK.X1342.pdf
GFGFGFGGGF.X2676.pdf
TTTTTGGG.X3234.pdf
546478.X3544.pdf
Es existieren bereits die Ordner
C:\sortiert\1
C:\sortiert\2
C:\sortiert\3
In diese Ordner soll die Batch-Datei nun die entsprechenden Dateien je nach dem, welches die zweite Stelle des Dateinamens nach dem ersten Punkt ist, einsortieren.
Könnt ihr mir vielleicht dabei helfen? Ich habe bereits dank eurer Hilfe in einem früheren Thread folgende Batch-Datei zur Hand, die allerdings den ersten Punkt vernachlässigt und nur die zweite Stelle im Dateinamen berücksichtigt:
Vielen Dank sage ich schonmal im Voraus für all eure Bemühungen!
Liebe Grüße
pirat-ohne-bart
ich stehe vor folgender Problemstellung:
Ich benötige eine Batch-Datei, die Dateien aus einem bestimmten Ordner nach der zweiten Stelle nach dem ersten Punkt in ihrem Dateinamen in entsprechende Ordner sortiert.
Also zum Beispiel:
In C:\Unsortiert liegen die Dateien
ABCDEF.X1234.pdf
FGHIJK.X1342.pdf
GFGFGFGGGF.X2676.pdf
TTTTTGGG.X3234.pdf
546478.X3544.pdf
Es existieren bereits die Ordner
C:\sortiert\1
C:\sortiert\2
C:\sortiert\3
In diese Ordner soll die Batch-Datei nun die entsprechenden Dateien je nach dem, welches die zweite Stelle des Dateinamens nach dem ersten Punkt ist, einsortieren.
Könnt ihr mir vielleicht dabei helfen? Ich habe bereits dank eurer Hilfe in einem früheren Thread folgende Batch-Datei zur Hand, die allerdings den ersten Punkt vernachlässigt und nur die zweite Stelle im Dateinamen berücksichtigt:
@echo off &setlocal enabledelayedexpansion
set "source=c:\unsortiert"
set "destination=c:\sortiert"
For %%a in ("%source%\*") do (
Set "name=%%~nxa"
Set "folder=!name:~1,1!"
If not exist "%destination%\!folder!" md "%destination%\!folder!" >nul 2>&1
move "%%a" "%destination%\!folder!\"
)
Vielen Dank sage ich schonmal im Voraus für all eure Bemühungen!
Liebe Grüße
pirat-ohne-bart
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 399109
Url: https://administrator.de/forum/dateien-nach-zweiter-stelle-nach-erstem-punkt-im-dateinamen-verschieben-399109.html
Ausgedruckt am: 22.04.2025 um 14:04 Uhr
2 Kommentare
Neuester Kommentar
Da ich leider kein Batch kann, hier ein Lösungsvorschlag in PowerShell:
Also anhand einer Look-Around Regex zu Prüfen welche Zahl beim Eingabeelement an der zweiten Stelle hinterm ersten Punkt steht, und anhand dieser die Sachen zu verschieben
$EingabePfad = "C:\Unsortiert"
$ZielPfad = "C:\sortiert\"
gci -Path $EingabePfad | ForEach-Object {
if ($_.name -match '(?<=^\w*\.\w{1})\d{1}(?=\w*.pdf$)') {
$ZielOrdner = $Matches.Values
Move-Item $_.FullName -Destination "$ZielPfad\$ZielOrdner"
}
}
Also anhand einer Look-Around Regex zu Prüfen welche Zahl beim Eingabeelement an der zweiten Stelle hinterm ersten Punkt steht, und anhand dieser die Sachen zu verschieben
Servus @pirat-ohne-bart ,
Dafür schaltest du in der Batch einfach eine zweite For-Schleife hinter die erste, welche den Dateinamen mit dem Punkt als Delimiter zerlegt:
Als Alternative noch eine Variante in Powershell
Grüße Uwe
Dafür schaltest du in der Batch einfach eine zweite For-Schleife hinter die erste, welche den Dateinamen mit dem Punkt als Delimiter zerlegt:
@echo off &setlocal enabledelayedexpansion
set "source=c:\unsortiert"
set "destination=c:\sortiert"
for %%a in ("%source%\*") do for /f "tokens=2 delims=." %%b in ("%%~na") do (
Set "name=%%b"
Set "folder=!name:~1,1!"
ff not exist "%destination%\!folder!" md "%destination%\!folder!" >nul 2>&1
move "%%a" "%destination%\!folder!\"
)
$source = 'C:\uinsortiert'
$destination = 'C:\sortiert'
gci $source -File | ?{$_.Basename -match '\..(.)'} | group {$matches[1]} | %{
$dest = "$destination\$($_.Name)"
if (!(Test-Path $dest)){md $dest -Force | out-null}
$_.Group | move-item -Destination $dest -Verbose
}