kelevra
Goto Top

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

Content-ID: 95317

Url: https://administrator.de/contentid/95317

Ausgedruckt am: 26.11.2024 um 21:11 Uhr

miniversum
miniversum 26.08.2008 um 12:39:36 Uhr
Goto Top
Versuchs mal so:
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
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.
kristov
kristov 26.08.2008 um 12:45:42 Uhr
Goto Top
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
Kelevra
Kelevra 26.08.2008 um 12:57:22 Uhr
Goto Top
hi

erstmal vielen dank @miniversum
habe da aber noch eine kleine frage warum steht in zeile 2 goto:eof, springt man da nicht automatisch ans ende des scriptes? oder hab ich das nur falsch verstanden?

@kristov: hmm jo ich merks ich hab mich wohl entwas unglücklich formuliert, tut mir leid, aber danke das du mich drau aufmerksam macht
bastla
bastla 26.08.2008 um 14:00:32 Uhr
Goto Top
Hallo Kelevra!

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. face-wink

Grüße
bastla
Kelevra
Kelevra 26.08.2008 um 14:45:17 Uhr
Goto Top
hmm,

also iwi wills grad net ganz durrchsickern bei mir was ist den "doren" , er sagt mir immer befehl doren kann nicht gefunden werden
^^ klärt einen unwissenden bitte auf was das macht. oder ist das der begin der routine und wird in zeile eins mit dem do doren an zeile 4 weitergeleitet?

grüße
bastla
bastla 26.08.2008 um 14:49:03 Uhr
Goto Top
Hallo Kelevra!

Mit einem "call" davor wird's viel besser gehen:
FOR /F "delims=" %%i in ('dir /b /a-d') do call :doren "%%~i"   
":doren" ist die Markierung für den Beginn des Unterprogrammes, das für jede einzelne Datei aufgerufen werden soll.

Grüße
bastla
miniversum
miniversum 26.08.2008 um 15:16:10 Uhr
Goto Top
Ups entshculdige.
Das kommt davon wenn man während dem diplomarbeitschreiben mal schnell noch was zusammentipt und es nicht testet.
Ich werds oben ändern.
Kelevra
Kelevra 26.08.2008 um 15:18:45 Uhr
Goto Top
so herzlichsten dank an bastla und miniversum

funktioniert einwandfrei.

aber wie der teufel will, kam grad mein vorgesetzter und will jetz mehr ,
er will jetz nicht mehr zeichen entfernen , sondern die dateinein gleich für eine neue datenbank nutzbar machen.
das bedeutet ich muss die ersten drei zeichen durch andere zeichen ersetzen

bsp. aus gug1928384.001 mach sap1928384.001
die 3 auszutauschenden buchstaben sollten am besten durch eine eingabe ständig änderbar sein, oder man änderts einfach im script (was halt nicht so nutzerfreundlich ist)

tut mir leid das ich euch damit nötigen muss,

aber besten dank schonmal für eure mühe

vieleicht finde ich ja selber ein lösung :X glaube ich aber weniger


ok
das ging fix
FOR /F "delims=" %%i in ('dir /b /a-d') do call :doren "%%~i"
goto:eof

:doren
set "filename=%~1"
set "newfilename=sap%filename:~0,0%%filename:~3%"
rename "%filename%" "%newfilename%"
goto:eof

so siehts aus und es funktioniert allerdings benennt sich die datei selber mit um.
geht das einfach mit einer extrazeile rename zu ändern oder kann man das allgemein umgehen diese problem
miniversum
miniversum 26.08.2008 um 16:29:37 Uhr
Goto Top
Das einfachste ist es du vershciebst die Batch in ein anderes Verzeichnis. Dann änderst du die Zeile:
FOR /F "delims=" %%i in ('dir /b /a-d') do call :doren "%%~i"
in:
FOR /F "delims=" %%i in ('dir /b /a-d "C:\Dateien\*.*"') do call :doren "%%~i"
Wenn deine Dateien in C:\Dateien liegen sollten
bastla
bastla 26.08.2008 um 18:04:13 Uhr
Goto Top
... oder Du nimmst durch
if "%~nx1"=="%~nx0" goto :eof  
als erste Zeile in ":doren" die Batchdatei selbst explizit von der Bearbeitung aus.

Grüße
bastla
Kelevra
Kelevra 27.08.2008 um 08:35:49 Uhr
Goto Top
guten morgen

die idee von bastle gefällt mir besser, dass is genau was ich gern hätte
aber leider funktionierts nich bei mir, habs in :doren als erste zeile geschrieben aber es will nich. ^^ und kannste mir bitte erklären was es mit "%~nx1"=="%~nx0" auf sich hat, damit ich das auch verstehe was da in meiner datei steht

vieln dank

mfg
kelevra
bastla
bastla 27.08.2008 um 09:12:53 Uhr
Goto Top
Hallo Kelevra!

... 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 Du
echo "%~nx0"  
echo "%~nx1"  
echo\
zwischen ":doren" und der "if"-Zeile einfügst.

Grüße
bastla
Kelevra
Kelevra 27.08.2008 um 09:33:50 Uhr
Goto Top
also erstmal ein dickes danke für deine erklären, ich wurde erleuchtet

werde es gleich mal ausprobieren mit echo, aber zuerst gibts n käffchen,

wenns nicht klappt, was ich nich hoffe meld ich mich nochmal,

vielen dank für die mühe
Kelevra
Kelevra 27.08.2008 um 10:03:20 Uhr
Goto Top
jetzt bin ich happy

danke für die hilfe

mfg
kelevra
miniversum
miniversum 27.08.2008 um 13:41:52 Uhr
Goto Top
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"  
und dann im :doren
if "%~nx1"=="%exclude%" goto :eof  
oder die For-Schleife so gestalten:
FOR /F "delims=" %%i in ('dir /b /a-d') do if "%~nx1" neq "%~nx0" call :doren "%%~i"  
bastla
bastla 27.08.2008 um 14:17:20 Uhr
Goto Top
@miniversum

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
miniversum 27.08.2008 um 14:43:00 Uhr
Goto Top
Naja.. ich habs extra ausprobiert.
Folgende Batch liefert bei mri in den Zeilen mit "0" immer ":doren" und nicht den Dateinamen.
@echo off
FOR /F "delims=" %%i in ('dir /b') do call :doren "%%~i"  
goto:eof

:doren
echo 0 %0
echo 1 %1
goto:eof
bastla
bastla 27.08.2008 um 16:55:39 Uhr
Goto Top
@miniversum

Was Du aber nicht ausprobiert hast:
echo 0 %~nx0 und auch %~f0
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
Biber
Biber 28.08.2008 um 01:46:40 Uhr
Goto Top
Moin Alle,
<OT>
das gibt es nicht in allen Foren -
Expertentalk auch über doren.

</OT>

Irgendwie schön hier... face-wink

Grüße
Biber
miniversum
miniversum 28.08.2008 um 11:11:39 Uhr
Goto Top
Auch OT:
Ehrlich gesagt wär mir ein Expertentalk über Doreen lieber ;)