einzelnen Buchstaben entfernen mittels .bat Datei
guten tach,
ich brauche eine Batch-Datei die mir einzelne zeichen aus dateinamen löscht.
hier zur veranschaulichung ein Bsp was ich meine:
tezst4257365.001
soll werden zu
test4257356.001
es soll also bei allen Dateinen in einem ordner das 3 Zeichen löschen.
Denke mal ich muss zuert alle dateinamen einlesen und dann kann ich erst das gewünschte zeichen löschen.
wenn mir jmd sagenkönnte wie das geht währe ich sehr dankbar.
PS. es kommt auch vor das die ersten drei oder nur das zweite Zeichen weg soll.
das ändert je nach dem was für datensätze erstellt werden.
grüße
ich brauche eine Batch-Datei die mir einzelne zeichen aus dateinamen löscht.
hier zur veranschaulichung ein Bsp was ich meine:
tezst4257365.001
soll werden zu
test4257356.001
es soll also bei allen Dateinen in einem ordner das 3 Zeichen löschen.
Denke mal ich muss zuert alle dateinamen einlesen und dann kann ich erst das gewünschte zeichen löschen.
wenn mir jmd sagenkönnte wie das geht währe ich sehr dankbar.
PS. es kommt auch vor das die ersten drei oder nur das zweite Zeichen weg soll.
das ändert je nach dem was für datensätze erstellt werden.
grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 95317
Url: https://administrator.de/contentid/95317
Ausgedruckt am: 26.11.2024 um 21:11 Uhr
20 Kommentare
Neuester Kommentar
Versuchs mal so:
Bei jeder Datei wird das 3. Zeichen entfernt.
Die Einstellung dafür erfolgt in der 6. Zeile. "0,2" bedeutet dabei ab den 0. Zeichen die nächsten 2 Zeichen nehmen. Danach ab dem 3. Zeichen den rest. Also "Anfang,Länge". Genaueres kannst du nachlesen wen du in der Eingabeaufforderung "Set /?" eingibst.
Hier werden di Änderungen nur erstmal angezeigt. Wenns so past entferne das ECHO und es sollte wirklich umbenannt werden.
FOR /F "delims=" %%i in ('dir /b') do call :doren "%%~i"
goto:eof
:doren
set "filename=%~1"
set "newfilename=%filename:~0,2%%filename:~3%"
ECHO rename "%filename%" "%newfilename%"
goto:eof
Die Einstellung dafür erfolgt in der 6. Zeile. "0,2" bedeutet dabei ab den 0. Zeichen die nächsten 2 Zeichen nehmen. Danach ab dem 3. Zeichen den rest. Also "Anfang,Länge". Genaueres kannst du nachlesen wen du in der Eingabeaufforderung "Set /?" eingibst.
Hier werden di Änderungen nur erstmal angezeigt. Wenns so past entferne das ECHO und es sollte wirklich umbenannt werden.
Hallo,
Deine Anforderungen widersprechen sich. Erst schreibst Du, ein bestimmtes Zeichen soll gelöscht werden, dann schreibst Du wieder, ein Zeichen an einer bestimmten Position soll gelöscht werden. Das sind 2 verschiedene Dinge. Bei Deinem Beispiel wird das 4. Zeichen gelöscht, drunter bei der Erklärung des Beispiels schreibst Du aber, das 3. soll gelöscht werden.
Vllt. kannst Du das präzisieren. Ich denke, Du meinst, ein bestimmtes Zeichen soll, egal an welcher Stelle es steht, gelöscht werden (ich nehme an, auch wenn das Zeichen mehrfach vorkommen sollte). Richtig so?
lg,
kristov
Deine Anforderungen widersprechen sich. Erst schreibst Du, ein bestimmtes Zeichen soll gelöscht werden, dann schreibst Du wieder, ein Zeichen an einer bestimmten Position soll gelöscht werden. Das sind 2 verschiedene Dinge. Bei Deinem Beispiel wird das 4. Zeichen gelöscht, drunter bei der Erklärung des Beispiels schreibst Du aber, das 3. soll gelöscht werden.
Vllt. kannst Du das präzisieren. Ich denke, Du meinst, ein bestimmtes Zeichen soll, egal an welcher Stelle es steht, gelöscht werden (ich nehme an, auch wenn das Zeichen mehrfach vorkommen sollte). Richtig so?
lg,
kristov
Hallo Kelevra!
Grüße
bastla
warum steht in zeile 2 goto:eof, springt man da nicht automatisch ans ende des scriptes?
So ist es, und das ist auch nötig, um nicht nochmals das Unterprogramm ";doren" zu durchlaufen - oder anders formuliert: Wenn die Zeile 2 erreicht ist, wurden durch die Schleife bereits alle Dateien verarbeitet - daher: habe fertig. Grüße
bastla
Hallo Kelevra!
Das aufgerufene Unterprogramm ":doren" verhält sich im Prinzip wie ein eigener Batch, daher repräsentiert %0 die Batchdatei selbst, %1 bis maximal %9 verweisen auf die übergebenen Parameter.
Mit "%~nx0" lässt sich Name und Extension der Batchdatei, mit "%~nx1" das selbe für die beim Aufruf übergebene aktuelle Datei lt "for"-Schleife ermitteln - bei Übereinstimmung soll keine Umbenennung erfolgen, daher sofort "goto :eof".
zwischen ":doren" und der "if"-Zeile einfügst.
Grüße
bastla
... was es mit "%~nx1"=="%~nx0" auf sich hat ...
... kannst Du mit "for /?" (gegen Ende) auch nachlesen.Das aufgerufene Unterprogramm ":doren" verhält sich im Prinzip wie ein eigener Batch, daher repräsentiert %0 die Batchdatei selbst, %1 bis maximal %9 verweisen auf die übergebenen Parameter.
Mit "%~nx0" lässt sich Name und Extension der Batchdatei, mit "%~nx1" das selbe für die beim Aufruf übergebene aktuelle Datei lt "for"-Schleife ermitteln - bei Übereinstimmung soll keine Umbenennung erfolgen, daher sofort "goto :eof".
leider funktionierts nich bei mir
Warum das so sein sollte, kann ich mir eigentlich nicht vorstellen, aber lass einmal zur Kontrolle jeweils die entsprechenden Werte anzeigen, indem Duecho "%~nx0"
echo "%~nx1"
echo\
Grüße
bastla
Das aufgerufene Unterprogramm ":doren" verhält sich im Prinzip wie ein eigener Batch, daher repräsentiert %0 die Batchdatei selbst, %1 bis maximal %9 verweisen auf die übergebenen Parameter.
Daher würde im %0 auch ncith das name der Batch stehen sondern eben ":doren".
Wenn dann noch vor der For-Schleife ein
set "exclude=%~nx0"
if "%~nx1"=="%exclude%" goto :eof
FOR /F "delims=" %%i in ('dir /b /a-d') do if "%~nx1" neq "%~nx0" call :doren "%%~i"
@miniversum
Gegen Deinen Lösungsansatz ist aber natürlich nichts einzuwenden ...
Grüße
bastla
Daher würde im %0 auch ncith das name der Batch stehen sondern eben ":doren".
Bezogen auf meine Aussage hast Du, rein sprachlich betrachtet (wobei allerdings die Einschränkung durch "im Prinzip" nicht ganz zufällig gewählt war), durchaus recht, allerdings ist auch das Unterprogramm ":doren" immer noch in einer Datei gespeichert, und deren Name steht als %0 zur Verfügung.Gegen Deinen Lösungsansatz ist aber natürlich nichts einzuwenden ...
Grüße
bastla
@miniversum
Was Du aber nicht ausprobiert hast:
Insofern können wir uns vielleicht darauf einigen, dass "im Prinzip" das Unterprogramm ein eigener Batch ist, aber hinsichtlich der erweiterten Variablenauswertung dennoch Informationen über die es beinhaltende Datei liefert ...
Grüße
bastla
Was Du aber nicht ausprobiert hast:
echo 0 %~nx0 und auch %~f0
Grüße
bastla