Batch For-Schleife Tokens
Hallo zusammen,
ich möchte aus dem Namen eines Ordners zwei neue Ordner anlegen. Der Name des Quellordners ist wie folgt aufgebaut:
"Test_Datum_Beschreibung"
Wichtig dabei zu wissen ist, dass innerhalb der "Beschreibung" auch Unterstriche vorkommen können.
Der neue Ordnerpfad der angelegt werden soll sieht wie folgt aus:
C:\Test\Datum_Beschreibung\
Mein bisheriger Code in Batch ist folgender:
Das Problem dabei ist, dass wenn die Beschreibung zum Beispiel wie folgt aussieht: "Max_Mustermann" wird nur "Max übernommen.
Gibt es eine Möglichkeit einfach den ganzen Rest des Ordnernamens in eine Variable zu packen?
ich möchte aus dem Namen eines Ordners zwei neue Ordner anlegen. Der Name des Quellordners ist wie folgt aufgebaut:
"Test_Datum_Beschreibung"
Wichtig dabei zu wissen ist, dass innerhalb der "Beschreibung" auch Unterstriche vorkommen können.
Der neue Ordnerpfad der angelegt werden soll sieht wie folgt aus:
C:\Test\Datum_Beschreibung\
Mein bisheriger Code in Batch ist folgender:
for /d %%c in ("%%b\*") do (
for /f "tokens=1,2,3 delims=_" %%d in ("%%~nc") do (
for /f "delims=" %%i in ('dir /b /s /a-d "%%b\%%~nxc\*.txt"') do (
if not exist "%ziel%\%%d" md "%ziel%\%%d" >nul
if not exist "%ziel%\%%d\%%e_%%f" md "%ziel%\%%d\%%e_%%f" >nul
move "%%i" "%ziel%\%%d\%%e_%%f\"
)
)
)
Das Problem dabei ist, dass wenn die Beschreibung zum Beispiel wie folgt aussieht: "Max_Mustermann" wird nur "Max übernommen.
Gibt es eine Möglichkeit einfach den ganzen Rest des Ordnernamens in eine Variable zu packen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 668947
Url: https://administrator.de/forum/batch-for-schleife-tokens-668947.html
Ausgedruckt am: 22.12.2024 um 11:12 Uhr
3 Kommentare
Neuester Kommentar
"tokens=1,2,* delims=_"
Dann wird nach dem ersten und zweiten getrennt, der Rest bleibt dann aber so wie er ist in der letzten Variablen. Es gibt dann drei Variablen %%d ist "Test" und %%e "Datum" und %%f "Beschreibung_mit_weiteren_Unterstrichen"
Tutorial zur FOR-Schleife
Dann wird nach dem ersten und zweiten getrennt, der Rest bleibt dann aber so wie er ist in der letzten Variablen. Es gibt dann drei Variablen %%d ist "Test" und %%e "Datum" und %%f "Beschreibung_mit_weiteren_Unterstrichen"
Tutorial zur FOR-Schleife
Moin,
ich bin nicht sicher aber ich glaube das Problem liegt in der Art und Weise, wie die tokens-Option im Batch-Skript verwendet wird. Mit tokens=1,2,3 wird der Name des Quellordners in genau drei Teile aufgeteilt, wobei der dritte Teil alles ab dem ersten Unterstrich in der "Beschreibung" abschneidet. Wenn mehr Unterstriche vorkommen, wird der Rest ignoriert.
Um sicherzustellen, dass der gesamte Rest des Ordnernamens in eine Variable gepackt wird, kannste tokens=1,2* verwenden. Das * sorgt dafür, dass der dritte Token alle verbleibenden Zeichen nach dem zweiten Unterstrich aufnimmt.
Der Code könnte so aussehen:
folgendes habe ich hier geändert:
Die Zeile for /f "tokens=1,2,3 delims=_" %%d in ("%%~nc") do wurde zu for /f "tokens=1,2* delims=_" %%d in ("%%~nc") do geändert.
Das * am Ende sorgt dafür, dass %%f den gesamten Rest des Namens aufnimmt, unabhängig von zusätzlichen Unterstrichen.
Ich hoffe das hilft.
ich bin nicht sicher aber ich glaube das Problem liegt in der Art und Weise, wie die tokens-Option im Batch-Skript verwendet wird. Mit tokens=1,2,3 wird der Name des Quellordners in genau drei Teile aufgeteilt, wobei der dritte Teil alles ab dem ersten Unterstrich in der "Beschreibung" abschneidet. Wenn mehr Unterstriche vorkommen, wird der Rest ignoriert.
Um sicherzustellen, dass der gesamte Rest des Ordnernamens in eine Variable gepackt wird, kannste tokens=1,2* verwenden. Das * sorgt dafür, dass der dritte Token alle verbleibenden Zeichen nach dem zweiten Unterstrich aufnimmt.
Der Code könnte so aussehen:
for /d %%c in ("%%b\*") do (
for /f "tokens=1,2* delims=_" %%d in ("%%~nc") do (
for /f "delims=" %%i in ('dir /b /s /a-d "%%b\%%~nxc\*.txt"') do (
if not exist "%ziel%\%%d" md "%ziel%\%%d" >nul
if not exist "%ziel%\%%d\%%e_%%f" md "%ziel%\%%d\%%e_%%f" >nul
move "%%i" "%ziel%\%%d\%%e_%%f\"
)
)
)
folgendes habe ich hier geändert:
Die Zeile for /f "tokens=1,2,3 delims=_" %%d in ("%%~nc") do wurde zu for /f "tokens=1,2* delims=_" %%d in ("%%~nc") do geändert.
Das * am Ende sorgt dafür, dass %%f den gesamten Rest des Namens aufnimmt, unabhängig von zusätzlichen Unterstrichen.
Ich hoffe das hilft.