it-swarm.com.de

Fehler "Eingabezeile ist zu lang" in BAT-Datei

Ich habe ein Problem beim Ausführen einer Bat-Datei. Nach einiger Zeit bekomme ich den Fehler "Eingabezeile ist zu lang".

Die Struktur der Bat-Datei ist einfach. Es gibt eine Haupt-Bat-Datei, die 10 weitere Bat-Dateien aufruft, die für die Aktualisierung der Daten meiner Systemmodule verantwortlich sind. In den Aktualisierungsdaten-Bat-Dateien gibt es viele Aufrufe für einen Befehl (.cmd-Datei) meines Systems, der für die Aktualisierung der Daten durch einige Berechnungen verantwortlich ist.

Der Punkt ist, wenn der Prozess in einem Windows 2003 Server lief, war er in Ordnung. Keine Fehler.

Als es dann auf Windows 2008 Server aktualisiert wurde, führe ich die Haupt-Bat-Datei aus. Einige Stunden später erhielt ich die Fehlermeldung "Eingabezeile ist zu lang". Ich kann nicht einmal jeden Befehl ausführen, der in den aktualisierten Datenfledermäusen in diesem Cmd-Fenster enthalten ist. Wenn ich aber das cmd-Fenster schließe und ein neues öffne, kann ich die Befehle fehlerfrei ausführen.

Jemand hatte das gleiche Problem? Oder eine Lösung?

Danke im Voraus.

48
Carlos Grossi

Ich hatte das gleiche Problem, wenn ein Build-Skript in einem Cmd-Fenster ausgeführt wurde. Nach ungefähr 13 Mal bekam ich den gleichen Fehler. Das Build-Skript musste sicherstellen, dass vcvarsall.bat ausgeführt wurde, sodass es jedes Mal vcvarsall.bat ausgeführt wurde. 

vcvarsall.bat ist nicht intelligent genug, um nur Dinge zur path hinzuzufügen, wenn sie nicht bereits vorhanden sind, sodass eine Reihe doppelter Einträge hinzugefügt wurde.

Meine Lösung bestand darin, eine definierte Prüfung für eine Umgebungsvariable hinzuzufügen, von der ich weiß, dass sie von vcvarsall.bat gesetzt wird.

if not defined DevEnvDir (
    call vcvarsall.bat
)

Überprüfen Sie Ihre Pfadumgebungsvariable nach jedem Lauf und prüfen Sie, ob sie wächst. Wenn dies der Fall ist und Duplikate vorhanden sind, müssen Sie die path-Datei mit etwas hinzufügen. Es gibt mehrere Möglichkeiten, klug darüber zu sein.

60
Cookie Butter

Ich bin gerade jetzt zum ersten Mal auf diesen Fehler gestoßen, nachdem ich denselben Befehlssatz (Stopp/Start eines Anwendungsservers) mehrmals ausgeführt hatte. 

Der Fehler wurde gestoppt, als ich eine neue Befehlszeile öffnete und die Befehle der neuen Befehlszeilenkonsole ausprobierte.

14
Jim Bethancourt

Ich weiß, dass das ziemlich alt ist, aber das andere Problem, dem ich begegnet bin, war ein "" am Ende des Befehls, den ich anrief. Ich habe versucht anzurufen

"C:\Programme (x86)\Microsoft Visual Studio 12.0\Common7\Tools ..\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" "

Wenn Sie feststellen, habe ich zwei "am Ende der Zeile. Dies verursachte meine Probleme (Notepad ++ schloss es ein, als ich die Anführungszeichen eingaben) Suche nach Informationen und nichts anderes funktioniert, überprüfen Sie dies. :)

7
Chris

Zu diesem Thema gibt es einen Windows Knowledge Base-Artikel . Sie erwähnen keinen Windows 2008-Server, aber sie erwähnen den Größenunterschied zwischen anderen Versionen des Betriebssystems. Daher wäre es nicht überraschend, wenn es einen Unterschied zwischen 2003 und 2008 gab.

Einige Lösungsvorschläge für das Problem sind:

  • Ändern Sie Programme, für die lange Befehlszeilen erforderlich sind, sodass sie eine Datei verwenden, die die Parameterinformationen enthält, und fügen Sie den Namen der Datei in die Befehlszeile ein.
  • Verwenden Sie kürzere Namen für Ordner und Dateien.
  • Reduzieren Sie die Tiefe der Ordnerbäume.

Sie können den gesamten Artikel lesen, wenn Sie sehen möchten, was sie sonst noch zu sagen haben, aber dies waren die Vorschläge, die am ehesten auf Sie zutreffen.

5

Es kann auch vorkommen, dass die Leerzeichen in Ihrer Datei (Ansi-Zeichen 0x20) wirklich geschützte Leerzeichen sind (ich hatte 0xA0 , aber Ihre können variieren). Dies kann passieren, wenn Sie aus dem Internet in einen UTF-8-fähigen Editor kopieren/einfügen. 

Das Ergebnis hängt von der aktuellen Codepage der Fenster, Ihrem Editor und dergleichen ab. Reparieren:

  1. Verwenden Sie einen Hexadezimal-Editor 
  2. Schauen Sie sich an, wie Räume dargestellt werden
  3. Suchen und ersetzen Sie Ihre Vertretung

Ich habe HxD verwendet, um 0xA0 durch 0x20 zu suchen und zu ersetzen.

0
ixe013

Ich bin auch darauf gestoßen.

Ich habe versucht, vcvars.bat auszuführen, wie andere hier zu versuchen scheinen.

Das zugrunde liegende Problem für mich schien zu sein, dass meine PATH-Variable mit Wiederholungen eines bereits ziemlich langen Pfades verschmutzt war. Die Reparatur meines Pfades schien das Problem für mich zu beheben (in einem neuen Terminal natürlich). Beachten Sie, dass dieses Update nicht spezifisch für vcvars.bat oder Visual Studio ist.

Ich bin gespannt, ob die Lösung von Cookie Butter ein Workaround ist und das zugrunde liegende Problem dasselbe ist.

0
sg_man