Batch Fortlaufende Nummer bei Umbenennung

aggitron

Commander
Registriert
Jan. 2006
Beiträge
2.074
Hallo,

ich habe in meinem Batch Skript folgende Zeile stehen:

Code:
if exist "%lw%\*.sta" ren "%lw%\*.sta" *_%dt%.sta_

lw = Laufwerkspfad
dt = Datum im Format JJJJMMTT_HHMMSS

Er benennt also im Ziel Verzeichnis eine *.sta Datei in *.sta_ um und hängt das Datum an den Dateinamen. Das funktioniert auch prima.
Allerdings stehen neuerdings oftmals mehrere Datei in benanntem Pfad. Um Problemen aus dem Weg zu gehen möchte ich gern an den Dateinamen noch eine fortlaufende Nummer, beginnend bei 0, anhängen. Wie gehe ich das am besten an?
 
Hi,

Stichwort: Schleife :)

Lass einfach für jeden Ordner eine Schleife für die darin empfindlichen Dateien laufen und hänge die Schleifenvariable an. Oder (ganz banal) du legst eine Variable mit dem Wert "1" fest und immer, wenn dein "if exist" true ergibt führst du den rename-Befehl aus und zählst im Anschluß daran die Variable "+1".

VG,
Mad
 
Das habe ich schon probiert. Das Problem ist das ich den Dateinamen nicht greifen kann, da der völlig unterschiedlich sein kann.

Das ist mein Ansatz:

Code:
set /a counter=0 

:count 

if exist "C:\Test\*.sta" (
  ren "C:\Test\*.sta" %counter%.sta
  set /a counter+=1
  goto :count
)
else (
  echo das wars.  
)

Bei ner Schleife hätte man imo das gleiche Problem. Wann soll sie enden?
 
Hi,

die Schleife soll enden, wenn alle Dateien in einem Ordner geprüft und / oder umbenannt worden sind :)

VG,
Mad
 
Ok, dann fehlt mir hier eine Windung. ;)

Das kommt meiner Vorstellung bisher am nächsten:

(Nicht wegen den Dateiendungen wundern;))

Code:
set /a counter=0
for %%i IN ("C:\Test\elb\test\*.ord") DO (
  ren "C:\Test\elb\test\*.ord" %counter%.ord
  set /a counter+=0
  )

Wo ist denn hier der Fehler?
 
Hi,

set /a counter+=0 würde ich in set /a counter+=1 ändern. Kann das Script gerade selber leider nicht testen. Was genau passiert / passiert nicht?

VG,
Mad
 
Änderung habe ich gemacht. Dennoch:

Dateiname existiert bereits, oder die Datei konnte nicht gefunden werden.

Er benennt die erste gefundene Datei in 0.ord um. Danach kommt die Fehlermeldung.
 
Zuletzt bearbeitet:
Hi,

überleg mal genau, was du umbenennen willst ;)

ren "C:\Test\elb\test\*.ord" %counter%.ord => ren "%%i" %counter%.ord

Mal testen und berichten.

VG,
Mad
 
Hi,
hier nach Vorlage von genialen Biber etwas verändert, aber Trift wohl das was du brauchst.
Code:
@echo off & setlocal enableDelayedExpansion & Set /a "x=987000" 
for %%i in (*.jpg) do @set /a "x=!x!+1">nul & rename "%%i" %%~ni_!x:~-3!%%~xi
 
Zuletzt bearbeitet:
Hab es korrigiert. ;)

Fehlermeldung bleibt aber die gleiche. Er möchte jede einzelne Datei immer mit 0.ord ersetzen. das klappt aber nur einmal.
Er führt das set /a counter+=1 scheinbar nicht aus.
Kann man das direkt in die Schleife "integrieren"?

/edit
auch das Beispiel von Entilzha funktioniert nicht. Gleiche Fehlermeldung.

Code:
set /a "x=0"
for %%i in ("C:\Test\elb\test\*.ord") ren %%i %x%.ord & do @set /a "x=!x!+1"
 
Zuletzt bearbeitet:
Hi,

also, jetzt einfach mal direkt den Code, zwar weniger Lerneffekt aber dann klappt es ;)

Code:
@echo off
setlocal enableDelayedExpansion 
set counter=0

for %%i IN ("C:\Test\elb\test\*.ord") DO (ren "%%i" "!counter!.ord" & set /a counter+=1)

Getestet mit einem Ordner mit ".ord"-Dateien, hat wunderbar geklappt :)

VG,
Mad
 
  • Gefällt mir
Reaktionen: NeuesSein
Ok, ich habe die Fehler gefunden. Zum einen
Code:
setlocal enableDelayedExpansion
was ich bisher überhaupt noch nicht gehört habe. :freak:
Zum anderen muss beim umbenennen die Variable in "!" stehen anstatt, wie bei mir, in "%".
Was ist denn hier der Unterschied?
 
Hi,

klappt es denn so wie ich es geschrieben habe auch bei dir? Das wäre jetzt erstmal das Wichtigste das zu wissen!

Erklärung ist z.B. hier zu finden. Ist relativ simpel, die "!" und das "enableDelayedExpansion" spielen da Hand in Hand.

VG,
Mad
 
Ja, klappt. Dafür schon mal ein fettes Danke!
 
@Madman1209 dein Code funktioniert wunderbar, meiner übrigens auch ;)
 
Ja deiner funktioniert auch. Hatte das "setlocal" vergessen.

/edit
Kann es sein das die for-Schleife von oben nicht auf Netzlaufwerken in Verbindung mit Win XP Home funktioniert?
 
Zuletzt bearbeitet:
Hi,

würde die Batch mal "Ausführen als..." und dann den Benutzer der Zugriff auf das Netzlaufwerk hat. An der Batch liegt es nicht, sondern wenn dann an den Windows-Zugriffsrechten.

VG,
Mad
 
Zurück
Oben