Ordner per batch umbenennen?

Ich möchte, je nachdem wie der Name eines bestimmten Ordners ist, diesen Namen ändern.
Also:
Wenn Name = Ordner1 dann umbenennen in Ordner2
Wenn Name = Ordner2 dann umbennenen in Ordner1

Es handelt sich imemr um den gleichen Ordner der einfach per Batch den Namen wieder ändern soll.
Leider bekomme ich das nicht hin.
Versucht habe ich folgendes:

if exist [Pfad][Ordner1]
REN Ordner1 Ordner2
if not exist [Pfad][Ordner1]
REN Ordner2 Ordner1

und

if exist [Pfad][Ordner1]
REN Ordner1 Ordner2
if exist [Pfad][Ordner2]
REN Ordner2 Ordner1

Es klappt einfach nicht.
Wie kann ich mein Vorhaben umsetzten?

Vielen Dank schonmal

2012-11-11T07:26:37Z

Ich habe jetzt mal den Code von „Egidius sieht wieder Ferkelchen“ genommen, unter der Annahme, dass nur ein Ordner in dem Verzeichnis besteht und dieser auch einen dieser beiden Namen hat:

if exist D:\Eigene Dateien\Ordner1 goto U1
REN Ordner2 Ordner1
goto ende
:U1 REN Ordner1 Ordner2
:ende

Von der Logik her müsste es ja funktionieren. Tut es aber nicht. Es wird immer nur der Ordner1 in Ordner2 umbenannt. Nicht andersherum. Hab ich bei der Sprungmarke was verkehrt gemacht?

Robert2012-11-11T08:29:13Z

Beste Antwort

Die Sprungmarke ":U1" steht allein in einer Zeile. - Doppelpunkt und hier gefolgt von "U1".
Der folgende Befehl steht in einer neuen Zeile.

Hier die Zeilen der Batch-Datei (Die Zeilen zwischen den beiden ### sind die Batch-Datei.):
###
@echo off
if exist "D:\Eigene Dateien\Ordner1" goto :U1
REN "D:\Eigene Dateien\Ordner2" Ordner1
goto :ende
:U1
REN "D:\Eigene Dateien\Ordner1" Ordner2
:ende
###

Hinweise:
Wenn ein Pfad Leerzeichen enthält sind die Anführungszeichen notwendig. Würde man keine Anführungszeichen eingeben würde bei der IF-Abfrage nur "D:\Eigene" verwendet werden und der Ordner existiert nicht.
Dieses gilt auch wenn der Ordner selbst Leerzeichen enthält.
Hier dazu ein Beispiel: REN "Test Ordner 1" "Test Ordner 2"

In meinem Test hat es gut funktioniert.


Die komplette Batchdatei müsste aber noch weitere Befehle enthalten.

- Überprüfen ob Ordner1 und Ordner2 existieren - FEHLER den man kann keinen Ordner in einen bereits existierenden Ordner umbenennen
- Überprüfen ob keiner der beiden Ordner existiert - FEHLER man kann keinen nicht existierenden Ordner umbenennen

Egidius2012-11-11T13:46:01Z

So kann da ja gar nicht funktionieren.
Einmal angenommen, Ordner1 existiert und Ordner2 existiert nicht
Dann geht folgendes ab:

if exist [Pfad][Ordner1]..............existiert nach Annahme
REN Ordner1 Ordner2...............also wird hier umgenannt,

Jetzt haben wir eine neue Situation: Ordner 1 exisiert nicht mehr, aber Ordner 2 existiert

if not exist [Pfad][Ordner1]........ ist jetzt wahr
REN Ordner2 Ordner1...............demnach wird auch hier umgenannt

Ergebnis (wie bei Start) Ordner1 existiert und Ordner 2 existiert nicht
-------------------------------------------------

Also muss es zumindest so aussehen:

if exist [Pfad][Ordner1] goto U1
REN Ordner2 Ordner1
goto ende
:U1 REN Ordner1 Ordner2
:ende
-------------------------------------------------------
Dabei hast Du jetzt aber noch nicht das Problem abgehandelt, das auftritt, wenn in U1: der Ordner 2 schon existiert, dann geht der Renamebefehl nämlich auch mächtig in die Hose.

Ebenso probelmatisch ist es im andern Zweig, wo der Ordner 1 nicht existiert. Wenn da nämlich der Ordner2 auch nicht existiert, nützt Dir Dein REN-Befehl auch nicht viel.

---------------------------------------------------------

Schematisch müsstest Du es so machen:

if (exist Ord1 und exist Ord2) goto ende
if (exist Ord1 und not exist Ord2) goto U1
if (not exist Ord1 und exist Ord2) goto U2
if (not exist Ord1 und not exist Ord2) ende
goto ende
:U1 ren o1 o2
goto ende
:U2 ren o2 o1
goto ende
:ende

Galius2012-11-11T13:38:45Z

Sicher, dass es nicht funktioniert? So wie ich das verstehe macht der erste Teil der Batch-Datei im Ergebnis garnichts: Ordner1 -> Ordner2 -> Ordner1 (das zweite REN würde ja auf den eben umbenannten Ordner ausgeführt werden). Das zweite Beispiel hat das gleiche Problem.
Wenn das wirklich Dein vorhaben ist, muss Du den IF-Block so umbauen, dass er nur eine der beiden Aktionen ausführt. Hier mal als Pseudocode, meine Batch-Kentnisse sind leider schon etwas älter:
IF exists(folder1)
REN folder1 folder2
ELSE
IF exists (folder2)
REN folder2 folder 1
END IF
END IF
Allerdings wird hier Folder 1 Prioritisiert, wenn beide Ordner gleichzeitig existieren funktioniert das Script nicht (was es aber auch sonst nicht tun würde, Du kannst ja nicht einen ordner auf den namen eines bereits bestehenden ordners umbennen)


Falls Du dich hier nur verschrieben hast und das Problem ein anderes ist:
Was ist denn die Fehlermeldung und mit welchem Betriebsystem arbeitest Du?
Setz mal ein "PAUSE" in die letzte Zeile der Batch-Datei und überprüfe die Meldungen.

Das der Ordner nicht umbenannt wird, kann mehrere Ursachen haben:
- Der Ausführer der Batch-Datei hat nicht die notwendigen Rechte
- Der Zielname existiert schon
- Der Zielname ist ungültig
- Anführungszeichen vergessen bei Verzeichnis- / Dateinamen mit Leer- und Sonderzeichen
- Der Ordner in dem die Dateien liegen (bzw der Ordner in dem Ordner2 angelegt werden soll) ist schreibgeschützt.

Beschreibe Doch dein Vorhaben nochmal etwas genauer, ich denke es liegt eher an der Planung, als an der Ausführung

Viel Erfolg.