Unbekannter Parameter im Ren-Befehl in der Batchdatei

Unbekannter Parameter im Ren-Befehl in der Batchdatei

Ich bin neu in der Batchdatei-Programmierung und analysiere eine vorhandene Batchdatei, die von einem ehemaligen Entwickler in unserem Unternehmen implementiert wurde. Ich versuche also herauszufinden, was er damit vorhatte. Ich habe den folgenden Befehl:

for /r %x in (\\Server6\doc_production\*38316468*) do ren "%x" /y \\Server6\doc_production\error\

Ich weiß, dass es sich hier um einen Loop-Befehl handelt, der den angegebenen Pfad rekursiv durchlaufen soll. Allerdings sind mir einige Teile unbekannt:

  1. Wofür ist der Parameter /y? Beim Googeln konnte ich nichts finden.

  2. Was genau macht dieser Befehl?

AKTUALISIEREN: Danke für die Antwort. Viele sagten, dass dieser Befehl Dateien, die dem Muster entsprechen, in den Fehlerunterordner verschieben würde. Also habe ich versucht, es auf meinem lokalen Computer zu testen. Ich habe das folgende Verzeichnis erstellt:

C:
├──test
│   └──error

Und ich habe eine Datei 38316468.sql in den Testordner eingefügt.
Dann habe ich den Befehl ausgeführt:

for /r %x in (C:\doc_production\*38316468*) do ren "%x" /y C:\doc_production\error\

Aber nichts passiert. Der Befehl wird ohne Fehlermeldung ausgeführt. Keine Syntaxfehler. Aber er tut nichts. Er verschiebt die Datei nicht, benennt sie nicht um. Warum ist das so?

Antwort1

Das sieht für mich nicht gültig aus.
RENAME (REN) hat keinen /y-Parameter und erfordert, dass der 2. Parameter ein Dateiname ist (kein Ordner wie hier).
MOVE hat "/y", was bedeutet: "belästigen Sie mich nicht mit "Sind Sie sicher"-Fragen, wenn das Ziel bereits existiert, und nehmen Sie an, dass ich mit "Ja" geantwortet habe" und es ist OK mit einem Ordner als 2. Parameter.
Aber im Fall von MOVE sollte das /Y direkt nach dem MOVE-Befehl und vor den Parametern erscheinen. Wenn Sie REN durch MOVE ersetzen, ist es immer noch ein Syntaxfehler.

Wie dem auch sei: Der FOR-Befehl erstellt eine Liste aller Dateien (durchsucht dabei auch die Unterverzeichnisse), die dem Muster entsprechen38316468und ruft dann für jede Übereinstimmung nacheinander REN auf. REN (sollte MOVE sein) versucht, jede Datei in den Fehlerordner umzubenennen (zu verschieben).
Aber die Verwendung von /Y ist für MOVE immer noch falsch.

Ein weiteres Problem, das zu diesem Fehler führt, ist ein Unterordner des Quellordners, auf den FOR angewendet wird. Dies führt dazu, dass der Befehl versucht, Dateien in sich selbst zu verschieben. (Z. B. von einem Fehlerordner in einen anderen.) Dies kann ein Problem darstellen oder auch nicht, je nachdem, ob der Fehlerordner später geleert wird, bevor der FOR-Befehl erneut verwendet wird.

Zu guter Letzt: Einige Worte zur Vorsicht:
Die Verwendung der %X-Variablen in einer Batch-Datei erfordert eine Verdoppelung des % auf %%X. In der Befehlszeile können Sie ein einzelnes % verwenden. Und bei %X-Variablen wird zwischen Groß- und Kleinschreibung unterschieden, sodass %X und %x nicht dasselbe sind.

Antwort2

Lassen Sie es uns sezieren, damit Sie erfahren, was es macht.

for /r %xDieser Befehl durchläuft die Ordnerstruktur beginnend beim \\Server6\doc_production\*38316468*Pfad und führt die DO-Anweisung für jede übereinstimmende Datei aus.

In Ihrem Befehl DOsteht die Aktion oder renfür das Umbenennen.

Dadurch /ywird verhindert, dass Sie in der Eingabeaufforderung zum Überschreiben von Dateien aus der Quelle aufgefordert werden, die im Ziel bereits vorhanden sind.

Es sieht so aus, als ob es im ersten Verzeichnis nach einer Platzhalternummer sucht und es umbenennt und in den Ordner /error/ verschiebt, aber es gibt keinen Dateinamen, damit es funktioniert. Damit dieser Befehl richtig funktioniert, muss ein Dateiname nach dem Ordner /error/ angegeben werden.

verwandte Informationen