Ordner aus Dateinamen erstellen
Hallo an alle, ich bin Batch Anfänger
Hallo ich versuche seit Stunden leider erfolglos eine Batch anzupassen. Habe auf Basis eines Codes von "bastla" (Batch - Dateiname bis zu einem bestimmten Zeichen einlesen und ein Ordner damit erstellen) versucht den Code auf meine Anforderungen anzupassen. Mein derzeitiger Stand ist:
chcp 1252
@echo off & setlocal
Set "Pfad=Y:\test"
Set "DelimString=."
pushd "%Pfad%"
for /f "delims.= tokens=3" %%i in ('dir /b /a-d *.*') do set "Name=%%i" & call :ProcessFile "%%i"
popd
goto :eof
:ProcessFile
call set "Name2=%%Name:*%DelimString%=%%"
call set "Ordner=%%Name:%DelimString%%Name2%=%%"
md "%Ordner%" 2>nul
move %1 "%Ordner%"
goto :eof
Meine Anforderungen sind:
Die Datein heißen zB:
6.000.Die Reifeprüfung
6.001.Die Reifeprüfung
35.000.Marilyn Monroe
35.001.Marilyn Monroe
Ordner sollen heißen:
Die Reifeprüfung
Marilyn Monroe
Die Dateien sollen mit vollständigem Dateinamen (zB: 6.000.Die Reifeprüfung und 6.001.Die Reifeprüfung) in den Ordner Die Reifeprüfung verschoben werden.
Es werden mit obigen Code die Ordner richtig erstellt, jedoch die Dateien nicht in die jeweiligen Ordner verschoben.
Meine Fragen:
Brauche ich das chcp 1252 wegen der Umlaute?
DelimString ist bei mir wahrscheinlich nicht ganz korrekt, weil ich ja keinen String sondern nur einen Punkt habe.
Wie muss ich den Code ändern, damit die Dateien auch verschoben werden.
Danke für eure Hilfe und LG, Joe
Hallo ich versuche seit Stunden leider erfolglos eine Batch anzupassen. Habe auf Basis eines Codes von "bastla" (Batch - Dateiname bis zu einem bestimmten Zeichen einlesen und ein Ordner damit erstellen) versucht den Code auf meine Anforderungen anzupassen. Mein derzeitiger Stand ist:
chcp 1252
@echo off & setlocal
Set "Pfad=Y:\test"
Set "DelimString=."
pushd "%Pfad%"
for /f "delims.= tokens=3" %%i in ('dir /b /a-d *.*') do set "Name=%%i" & call :ProcessFile "%%i"
popd
goto :eof
:ProcessFile
call set "Name2=%%Name:*%DelimString%=%%"
call set "Ordner=%%Name:%DelimString%%Name2%=%%"
md "%Ordner%" 2>nul
move %1 "%Ordner%"
goto :eof
Meine Anforderungen sind:
Die Datein heißen zB:
6.000.Die Reifeprüfung
6.001.Die Reifeprüfung
35.000.Marilyn Monroe
35.001.Marilyn Monroe
Ordner sollen heißen:
Die Reifeprüfung
Marilyn Monroe
Die Dateien sollen mit vollständigem Dateinamen (zB: 6.000.Die Reifeprüfung und 6.001.Die Reifeprüfung) in den Ordner Die Reifeprüfung verschoben werden.
Es werden mit obigen Code die Ordner richtig erstellt, jedoch die Dateien nicht in die jeweiligen Ordner verschoben.
Meine Fragen:
Brauche ich das chcp 1252 wegen der Umlaute?
DelimString ist bei mir wahrscheinlich nicht ganz korrekt, weil ich ja keinen String sondern nur einen Punkt habe.
Wie muss ich den Code ändern, damit die Dateien auch verschoben werden.
Danke für eure Hilfe und LG, Joe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 201822
Url: https://administrator.de/contentid/201822
Ausgedruckt am: 24.11.2024 um 03:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo Manrique und willkommen im Forum!
Versuch es so (ungetestet):
Die Ordner sollten schon mal erstellt werden, verschoben wird aber nur, wenn das "
Voraussetzung ist natürlich, dass tatsächlich immer zumindest 2 Punkte im Namen enthalten sind und alles bis zum 2. Punkt (inklusive) im Ordnernamen weggelassen werden soll.
Grüße
bastla
Versuch es so (ungetestet):
echo off & setlocal
Set "Pfad=Y:\test"
pushd "%Pfad%"
for /f "delims=" %%i in ('dir /b /a-d') do for /f "tokens=2* delims=." %%a in ("%%~ni") do (
md "%%b" 2>nul
echo move "%%i" "%%b"
)
popd
pause
echo
" nicht mehr vor dem "move
" steht ...Voraussetzung ist natürlich, dass tatsächlich immer zumindest 2 Punkte im Namen enthalten sind und alles bis zum 2. Punkt (inklusive) im Ordnernamen weggelassen werden soll.
Grüße
bastla
Hallo Manrique!
Zum "unsichtbaren" Ausführen (BTW: "
verwenden.
Die Einschränkung auf einen Dateityp hast Du völlig richtig umgesetzt.
Grüße
bastla
Zum "unsichtbaren" Ausführen (BTW: "
pause
" war nur für die Testphase gedacht und kannst Du daher gleich weglassen) könntest Du ein VBScript der ArtWScript.CreateObject("WScript.Shell").Run "D:\DeinBatch.cmd",0,True
Die Einschränkung auf einen Dateityp hast Du völlig richtig umgesetzt.
Grüße
bastla