sowahr
Goto Top

Dateien in Unterordnern ändern

Hallo Ihr,

ich bin neu hier und ein Newbie was Batch und Shell angeht, deshalb sorry falls ich doofe Frage(n) stelle. Hoffe ihr könnt mir ein paar Tipps geben.

Hallo,

also mein Problem ist folgendes:
ich habe einen Oberordner A darin liegen wiederum versch. Unterordner in denen wieder versch. Dateien liegen. Die Batchdatei liegt im Oberordner.
Nun habe ich unter anderem das Problem dass durch ein vorangegangener Befehl meine Dateien in diesem Format:
diesisteinedatei.yyy.xxx
ausgegeben werden.
Ich möchte aber die Datei so:
diesisteinedatei.xxx
haben.

Nun habe ich ich schon folgende Batch-Scripte ausprbiert aber keins hat geholfen.
Direkt über die Shell hat dieser Befehl gefunzt (wenn ich im Unterordner war):
for %f in (*.xxx) do @for /f "delims=.yyy" %n in ('echo %f') do ren %f %n.xxx   

Für das springen in die Unterordner nutze ich
 for /r %cd% %i in (*) do .... 
- das funktioniert hier aber mit diesem ren-Befehl nicht. Hier im Forum habe ich noch den Ausdruck
dir /b /a-d "%%i"
gefunden.
Aber dieser hilft nicht (tut sich gar nichts):
for /d %f in (*.xxx) do @for /f "delims=.yyy" %n in ('dir /b "%f"') do echo ren %f %n.xxx   

Nutze ich
 for /r %cd% %f in (*.xxx) do @for /f "delims=.yyy" %n in ('echo %~nf') do ren %~nf %n.xxx  
direkt in der Shell, dann sagt mir die Shell: "das System kann die angegebene Datei nicht finden". Sucht also im Oberordner nach xxx-Datein, aber da dort keine sind können ja auch keine gefunden werdenface-wink

Ich seh bestimmt den Wald vor lauter Bäumen nicht..
Kann mir wer evtl. einen Tipp geben? Das wäre echt toll!

Content-Key: 162257

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

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

Member: pieh-ejdsch
pieh-ejdsch Mar 08, 2011 at 17:34:25 (UTC)
Goto Top
moin sowahr,

da wäre der CMD-Liner (wenn sonst keine punkte im Dateinamen/Ordnernamen sind) etwa so:
for /f "tokens=1-3 delims=." %i in ('dir /s /b "*.xxx"') do @echo ren "%i.%j.%k" "%~ni.%k"  

das @echo zeigt Dir an was es tun würde. Wenn das @echo entfernt wird, tut es nur.

[Edit] fehlendes Hochkomma nachgezogen [/Edit]

Gruß Phil
Member: sowahr
sowahr Mar 10, 2011 at 16:13:34 (UTC)
Goto Top
Hallo Phil,

erstmal sorry das ich mich jetzt erst melde..
Wenn ich deinen Befehl in meinen Batch einfüge dann erscheint die Fehlermeldung
"delims." ist syntaktisch an dieser Stelle nicht verarbeitbar.

Bei
('dir ...) habe ich noch ein ' am Ende eingefügt. Ändert aber auch nichts daran dass es nicht geht.

Hab ich irgendwie ein " oder ' vergessen oder zuviel?
Die % habe ich schon verdoppelt im Batchscript.
Member: Biber
Biber Mar 10, 2011 at 17:42:01 (UTC)
Goto Top
Moin sowahr,

eigentlich hast du nichts vergessen... sehen deine Dateinamenskonventionen wirklich so aus wie beschrieben?
pieh-ejdschens (von dir korrigierte) Zeile macht jedenfalls, was sie soll:

Demo/POC am CMD-Prompt:

(=18:37:10  D:\temp=)
>echo x>testdatei.xxx.yyy

(=18:37:36  D:\temp=)
>echo x>testdatei.yyy.yyy

(=18:38:04  D:\temp=)
>for /f "tokens=1-3 delims=." %i in ('dir /s /b "*.yyy"') do @echo ren "%i.%j.%k" "%~ni.%k"
ren "D:\temp\testdatei.xxx.yyy" "testdatei.yyy"
ren "D:\temp\testdatei.yyy.yyy" "testdatei.yyy"

Grüße
Biber
Member: pieh-ejdsch
pieh-ejdsch Mar 10, 2011 at 19:04:18 (UTC)
Goto Top
moin,

das mit dem Vergessen holt mich doch immer wieder ein.
diesmal war es ein Hochkomma in der For Anweisung. (Immer nur diese dahergeschriebenen Zeilen tz tzz tzzz

Gruß Phil
Member: sowahr
sowahr Mar 11, 2011 at 08:55:34 (UTC)
Goto Top
Biber, ja sie sehen so aus wie geschrieben:
dateiname.xxx.yyy
wobei ich das xxx weg haben möchte.

Irgendwelche Ideen warum es bei mir nicht geht?
Kann ja nicht direkt mit dem xxx (ein nicht alltägliches Format) was zu tun haben oder doch?
Member: Biber
Biber Mar 11, 2011 at 09:47:48 (UTC)
Goto Top
Moin sowahr,

tja, dann kann eigentlich nur ein unabsichtigt hineingekommenes Leerzeichen, ein Anführungszeichen zuwenig oder ein ähnlicher Flüchtigkeitsfehler, der dir beim guttenbergen passiert ist, die Ursache sein.

Magst du noch mal dein Skript in Codetags hier posten bitte?

Grüße
Biber
Member: pieh-ejdsch
pieh-ejdsch Mar 11, 2011 at 11:30:43 (UTC)
Goto Top
moin,

1. was bring Dir der dir als Ausgabe
dir /s /b "*.xxx"
bzw. dieser Befehl ...
dir /s /b "*.xxx*"

Direkt über die Shell hat dieser Befehl gegeht (wenn ich im Unterordner war): ...
2. bist Du denn mit der Batch auch schon in dem Unterordner?
Zur Umsetzung gibts der Möglichkeiten viele (eine kleine Auswahl):
  • Die Batch in das gewünschte Verzeichnis legen und starten
  • In der Batch: Vor der For-Schleife in das gewünschte Verzeichnis wechseln
pushD "D:\my folder with dubble extensions"
  • In der Batch: In der For Anweisung dem Befehl "dir" das Verzeichnis mitgeben (was aber nur mit /Subfolder Funktioniert)
for /f "tokens=1-3 delims=." %%i in ('dir /s /b "D:\my folder with dubble extensions\*.xxx"') do @echo ren "%%i.%%j.%%k" "%%~ni.%%k"
  • Zum drag and drop des Ordners auf die Batch - In der Batch: Vor der Forschleife den Ordner an PushD übergeben
if exist "%~1\" (pushd "%~1") else goto :eof

[Edit]
bei Verwenden des PushD auch das passende Gegenstück popD am Ende der Batch benutzen
[\Edit]

Gruß Phil
Member: sowahr
sowahr Mar 11, 2011 at 12:09:46 (UTC)
Goto Top
Dies hier:
 for /f "tokens=1-3 delims=." %%i in ('dir /s /b "D:\my folder with dubble extensions\*.xxx"') do @echo ren "%%i.%%j.%%k" "%%~ni.%%k"   
hats direkt in der Shell gemacht(natürlich nur mit einem %, keinem doppeltenface-wink)


Bzw. ich habe eben nochmal Phils ersten Code ausprobiert, da macht er es mir auch (in der Shell). MMhh keine Ahnung was ich gestern da falsch gemacht hatte (ich nehme aber an dass es an
unabsichtigt hineingekommenes Leerzeichen, ein Anführungszeichen zuwenig oder ein ähnlicher Flüchtigkeitsfehler,
gelegen hat..)

Werds jetzt noch in der batch ausprobieren. Wenns dort nicht geht werd ich mich nochmal melden- ansonsten markier ich diese Frage als gelöstface-wink

Danke euch beiden für die Mühe und Hilfe!