Stimmt es, dass Batchdateien manchmal eine Unterbrechung benötigen, um Befehle ordnungsgemäß auszuführen?

398
Daniel

Was ich damit meine, ist zum Beispiel, wenn eine Datei in ein Verzeichnis verschoben werden soll und die nächste Codezeile davon ausgeht, dass die Datei vorhanden ist und versucht, sie zu öffnen, die Verschiebung selbst jedoch noch nicht abgeschlossen ist, was zu einem Fehler führt ? Zum Beispiel muss ping localhost -n 5 zwischen zwei Befehlen eingefügt werden?

1
Nun, wenn die Datei 4 GB hat, dann ja. Sie kann die Datei nicht öffnen, wenn sie noch übertragen wird. Eine Möglichkeit ist die Verwendung von "ping 127.0.0.1 -n 6> nul". Ofcourse 4GB dauert länger als 5 Sekunden. DOS wartet nicht auf den Abschluss eines Befehls. Dylan Rz vor 8 Jahren 1
Ok, das habe ich mich gefragt, ob es prüft, ob ein Befehl beendet ist oder nicht, bevor es zum nächsten weitergeht Daniel vor 8 Jahren 0
Nope Dos wartet nicht auf den Abschluss eines Befehls. Wahrscheinlich müssen Sie dann die If else -Anweisungen verwenden: Wenn eine xx-Datei vorhanden ist - gehen Sie zu. Dylan Rz vor 8 Jahren 0

1 Antwort auf die Frage

4
Ƭᴇcʜιᴇ007

Wenn Sie einen regulären Batch verwenden und weder START noch ähnliches implementieren, um neue Prozesse zu erzeugen, warten Sie, bis der vorherige Befehl beendet ist, bevor Sie fortfahren.

Der Stapel geht nicht weiter zum nächsten Befehl, bis er vom vorherigen Befehl einen Beendigungscode erhält. Im Kontext einer einfachen Dateikopie wartet sie also, bis der Kopierbefehl abgeschlossen ist. Sie können dies bezeugen, indem Sie einfach den Befehl Kopieren an der Eingabeaufforderung ausführen. Sie erhalten nicht die Aufforderung, bis das Kopieren abgeschlossen ist.

Nun können Sie Probleme bekommen, wenn Sie ein Programm starten, das neue Prozesse hervorbringt, die funktionieren und auf die Sie warten müssen.

Beispielsweise kann das Startprogramm beendet werden (ein Exit-Code wird in die Batchdatei zurückgegeben, wodurch es fortgesetzt wird), bevor der neu gestartete Prozess die erforderlichen Schritte ausführt, bevor Sie mit dem Batch fortfahren.

In diesen Fällen müssen Sie entweder die Batchdatei für eine gewisse Zeit tasklistanhalten (und hoffen, dass sie innerhalb dieser Zeit abgeschlossen wird) oder eine Schleife im Batch verwenden, um zu überwachen, ob der Prozess abgeschlossen ist (dh: with ), bevor Sie fortfahren .

Sehr gut erklärt Daniel vor 8 Jahren 0