Ich brauche einen Batch-Skript aufgerufen werden alsBatch-Skript - Set/Umgebungsvariable definieren, wenn nicht bereits gesetzt/definiert
SetEnvironmentVariableIfNotSet.bat environment_variable_name <value>
aus einem anderen Skript oder die Befehlszeile.
Ich bin auf keinen Fall Spezialist für Windows-Batch-Scripting aber durch Versuch und Irrtum und verschiedene Dinge zusammen Ansetzen, bisher habe ich kam mit dieser:
@setlocal EnableDelayedExpansion
@if "!%1!"=="" (
echo '%1' undefined. Defining with value
echo %2
endlocal DisableDelayedExpansion
goto :define_variable
) else (
echo '%1' already defined with value
echo !%1!
endlocal DisableDelayedExpansion
goto :eof
)
:define_variable
@set "%1=%2"
Wenn sie aufgerufen wird, das tut, was ich brauche:
C:\>call DefEnvVarIfNotDef.bat ASD "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"
'ASD' undefined. Defining with value
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"
C:\>echo %ASD%
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe"
Hier nach einer besseren/optimalen Lösung fragen. Das sieht mir sicher hässlich aus.
'wenn nicht% 1 Satz "% 1 =% 2"' definiert? Nur aus Neugier: Warum brauchst du so etwas? Warum nicht einfach angeben, wenn ASD nicht definiert ist ASD = "C: \ Programme (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ devenv.exe" '? – aschipfl
@aschipfl: Das aufrufende Skript läuft in verschiedenen Umgebungen; manchmal existieren die Variablen (vollständig oder unvollständig); In anderen Fällen sind keine vorhanden. Ich dachte, es wäre albern, einfach das "if" ASD "==" "..." zu wiederholen; plus mit dem Scriptlet bekomme ich auch aus was übernommen wird und was ausgefüllt ist – CristiArg