majcho
Goto Top

Dateien mit delims und tokens umbennenen

Hallo Experten,

habe nach der Anleitung Tutorial zur FOR-Schleife mir ein Batch gebastelt, indem ich .html Dateien umbenenne. Das funktioniert irgendwie nicht. Was mache ich falsch?

Folgende Dateien sollen mit selben Namen angeglichen werden:

jpg-datei: 198_cng_083_1846.jpg
html-datei: sid_198_1846.html soll in 198_cng_083_1846.html umbenannt werden

Folgender code ergibt jedoch ein falsches Ergebnis:

:: %e = 1 = sid
:: %f = 2 = Akn
:: %g = 3 = AK
:: %h = 4 = L
FOR /F "delims=_ tokens=1,2,3,4" %%e in ('dir /a-d /b /s "*.jpg"') do (  
copy sid_%%~ne_%%~nh.html %%~ne_%%~nf_%%~ng_%%~nh.html)

Kann mir jemand helfen?
Kommentar vom Moderator Biber am Nov 30, 2011 um 13:07:05 Uhr
Dateien mit delims und tokens umbennenen
Set /a rgc +=1
#779

Content-Key: 177038

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

Printed on: April 19, 2024 at 08:04 o'clock

Member: BigWim
BigWim Nov 30, 2011 at 08:40:21 (UTC)
Goto Top
Moin majcho,

Folgender code ergibt jedoch ein falsches Ergebnis:
Dann mußt Du das mal näher beschreiben, denn wenn ich Deine Schleife ausführe mit dem genannten Beispiel, kann ich keinen Fehler ausmachen.

Markus
Member: majcho
majcho Nov 30, 2011 at 12:32:33 (UTC)
Goto Top
Das sind die Dateien und so klappt es. Die Tokenauflistung gibt mir jedoch Rätsel auf.

Warum muss tokens 1 mit 2 beginnen, wenn es sich um den ersten Teil des Strings handelt?

FOR /F "delims=_ tokens=2,3,4,5" %%e in ('dir /a-d /b /s "*cng*.jpg"') do (  
copy sid_%%~ne_%%~nh.html %%~ne_%%~nf_%%~ng_%%~nh.html)

jpg-datei: 198_cng_083_1846.jpg
html-datei: sid_198_1846.html soll in 198_cng_083_1846.html umbenannt werden
...
339_cng_086_1381.jpg
html-datei: sid_339_1381.html soll in 339_cng_086_1381.html umbenannt werden

198_cng_083_1846.jpg
198_cng_083_1847.jpg
198_cng_083_1848.jpg
Member: Biber
Biber Nov 30, 2011 at 18:10:27 (UTC)
Goto Top
Moin majcho,

ich komme beim Testen bzw. Nachkaspern am CMD-Prompt mit den Tokens 2,3,4,5 zu keinem sinnvollen Ergebnis.

So funktioniert es bei mir (am CMD-Prompt):
## Vorbereitung/Testdateien
d:\temp\test>for %i in (198_cng_083_1846.jpg sid_198_1846.html 339_cng_086_1381.jpg sid_339_1381.html) do @echo %i
198_cng_083_1846.jpg
sid_198_1846.html
339_cng_086_1381.jpg
sid_339_1381.html

d:\temp\test>for %i in (198_cng_083_1846.jpg sid_198_1846.html 339_cng_086_1381.jpg sid_339_1381.html) do @echo.>%i

d:\temp\test>dir /b
198_cng_083_1846.jpg
339_cng_086_1381.jpg
sid_198_1846.html
sid_339_1381.html

## test - Dateien liegen im aktuellen Pfad - keine Pfadangabe im DIR-Befehl
d:\temp\test>FOR /F "delims=_ tokens=1-4" %e in ('dir /a-d /b /s "*cng*.jpg"') do @echo DEMO ren  %~dpesid_%~ne_%~nh.html %~ne_%f_%g_%~nh.html
DEMO ren  d:\temp\test\sid_198_1846.html 198_cng_083_1846.html
DEMO ren  d:\temp\test\sid_339_1381.html 339_cng_086_1381.html

d:\temp\test>e:
## test - von anderem lw/pfad aufgerufen
E:\>FOR /F "delims=_ tokens=1-4" %e in ('dir /a-d /b /s "D:\temp\test\*cng*.jpg"') do @echo DEMO ren  %~dpesid_%~ne_%~nh.html %~ne_%f_%g_%~nh.html
DEMO ren  D:\temp\test\sid_198_1846.html 198_cng_083_1846.html
DEMO ren  D:\temp\test\sid_339_1381.html 339_cng_086_1381.html

Anmerkung:
Du musst natürlich nur den ersten Token [hier %e] mit %~ne von dem vorangestellten Laufwerk+Pfad befreien.
der zweite oder dritte Parameter %f und %g hat defaultmäßig kein Lw/Pfad vorangestellt (in diesem Fall, wenn erst Parameter 4 der letzte des Dateinamens ist)
Der letzte Tokens des "gesanten Dateinamens, hier also %h muss wieder mit %~nh von der Endung befreit werden.

ööööhm... zweimal lesen oder einfach zur Gegenprobe in der Demozeile jeweils (%e statt %~ne) und (%h statt %~nh) schreiben.

Grüße
Biber