Wie bekomme ich den Befehl ver, um eine Batchdatei auszudrucken?

451
Namey

Ich habe ein Problem mit einer Build-Batch-Datei aus einem Drittanbieterprojekt, mit dem ich arbeite. Mit dem verBefehl wird geprüft, ob das Betriebssystem Windows ist . Leider kann ich den verBefehl nicht wie in der Befehlszeile aus der Stapeldatei drucken . Die Befehlszeilenausgabe lautet:

Microsoft Windows [Version 10.0.15063] 

Wenn ich jedoch eine Batch-Datei ausführen:

set v ver echo %v% 

Die Ausgabe ist stattdessen:

v=10.0 VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\ VS100COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\ VS90COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\ 

Das scheint mir die Windows-Version (wenn auch nicht so detailliert) und dann eine Reihe anderer Dinge zu geben. Gibt es einen Grund, warum dies anders funktionieren würde oder ausfällt? Kann jemand das ursprüngliche Verhalten aufrufen, das an der Befehlszeile beobachtet wird? Das Drittanbieter-Skript scheint das Verhalten für die Befehlszeilenversion zu erwarten.

Update: Basierend auf der Antwort unten habe ich festgestellt, dass dies zwar ein Problem war, aber nicht das Problem, das tatsächlich dazu führte, dass die Batch-Datei eines Drittanbieters fehlschlug. Das scheint so, als müsste es an einem Problem mit findstroder liegen %ERRORLEVEL% NEQ 0(da das Problem darin besteht, dass es den String "Windows" in der Version nicht gefunden hat).

1
Basierend auf @ JoeMuc2008 werde ich daran erinnert, dass ich den Befehl set nicht richtig aufgerufen habe. Was auch immer in Ver ist, ist definitiv immer noch nicht richtig, da der ursprüngliche Code von Drittanbietern das Wort "Windows" nicht finden konnte (und dies funktionierte eindeutig auf anderen Rechnern mit anderen Konfigurationen). Ich verwende heutzutage nicht mehr häufig .bat-Dateien, daher werde ich versuchen, den richtigen Weg für die Ausgabe des gesamten Inhalts aufzurufen. Namey vor 6 Jahren 0
Sehen Sie meine Antwort unten, wenn Sie eine Chance haben. Sie können diese Methode in einer Batchdatei verwenden, um die erwarteten Ergebnisse und den erwarteten Wert von diesem Befehl zu erhalten, genau wie ich es erläutert habe. Es scheint, als würde zuerst eine leere Zeile und dann die Windows-Version zurückgegeben werden, so dass dieser Befehl an den Befehl "find". "Weitergeleitet wird. Wenn Sie diesen Befehl verwenden, wird nur der erwartete Wert zurückgegeben, den Sie als Variable festlegen können usw. Pimp Juice IT vor 6 Jahren 0
Vielen Dank. Akzeptiert. Ich hätte nie gedacht, dass ich jemals so zufrieden sein würde mit etwas, was ich von McDonald's bekommen habe. Namey vor 6 Jahren 1

3 Antworten auf die Frage

1
JoeMuc2008

Um zu klären, wenn Sie set ohne Wertzuweisung verwenden (wie set value = 10 ), gibt set alle Umgebungsvariablen zurück, die mit dem von Ihnen angegebenen Ausdruck beginnen.

set v 

listet tatsächlich alle Variablen auf, deren Name mit einem v beginnt .

Ich gehe davon aus, dass Sie zuvor versehentlich eine Umgebungsvariable v erstellt haben, die "10.0" enthält. Das ist es, was eigentlich die erste Zeile Ihrer Ausgabe verursacht. Ich bin mir ziemlich sicher, dass das kein Ergebnis von cmd ist . Es ist nur in der Liste enthalten, da der Name auch dem angegebenen Suchmuster entspricht.

Leider enden hier meine Ideen. Es gibt einige Lösungen, wie man die Ausgabe eines Befehls in eine Umgebungsvariable einfängt, aber ich habe es nicht mit ver verstanden :

https://stackoverflow.com/questions/8055371/how-do-i-run-two-commands-in-one-line-in-windows-cmd https://stackoverflow.com/questions/2323292/windows-batch -Ausgabeausgabe eines Programms zu einer Variablen

Entschuldigung, ich kann Ihnen die gewünschte Lösung nicht wirklich geben. Ich hoffe, ich konnte helfen, ein paar Dinge zu klären. Ich wünsche Ihnen viel Glück, wenn Sie hier die perfekte Lösung finden.

1
Yorik

Versuchen:

for /f "delims=" %a in ('ver') do @set version=%a

Verwenden Sie doppelte Escapezeichen (% wird zu %%), wenn Sie innerhalb einer Batchdatei verwenden.

1
Pimp Juice IT

Übergeben Sie den verBefehl findmit dem "."Wert wie unten gezeigt an den Befehl, um ihm mitzuteilen, dass nur die Zeile mit einem Punkt aus dem verBefehl zurückgegeben werden soll, da anscheinend auch eine leere Zeile zuerst zurückgegeben wird. Auf diese Weise find "."wird die Zeile mit einem Punkt auf die Datei überschrieben.

ver | find ".">temp.txt SET /P v= < temp.txt ECHO %v% 

Weitere Ressourcen

Ich stehe korrigiert. Ihr Skript hat ein Problem, aber es liegt nicht an der Version. Frage annehmen und zurückziehen. Namey vor 6 Jahren 0