![Festlegen und Verwenden von Variablen innerhalb derselben Befehlszeile in Windows cmd.exe](https://rvso.com/image/1259401/Festlegen%20und%20Verwenden%20von%20Variablen%20innerhalb%20derselben%20Befehlszeile%20in%20Windows%20cmd.exe.png)
In Bash kann ich Folgendes tun EDITOR=vim command
und command
wird mit dem Wert auf ausgeführt , aber dies hat keine Auswirkungen auf den Wert von in der Shell selbst. Ist es möglich, dies in zu tun ?EDITOR
vim
EDITOR
cmd.exe
Antwort1
Beachten Sie, dass das cmd /C "set "EDITOR=vim" && echo %EDITOR%"
nicht funktionieren würde
.cmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Du bräuchtest:
- die
/V
Option, die verzögerte Erweiterung von Umgebungsvariablen durch Verwendung!
als Trennzeichen zu aktivieren. - kein Leerzeichen zwischen einem Befehl und dem
&&
(oder Anführungszeichen hinzufügen)
Das ist:
C:\> cmd /V /C "set EDITOR=vim&& echo '!EDITOR!'"
'vim'
# or
C:\> cmd /V /C "set "EDITOR=vim" && echo '!EDITOR!'"
'vim'
AlsUnten angegebenvonMaoismus, es ist cmd /V /C
,nicht cmd /C /V
(was würdenichtarbeiten)
Ich kann mir keinen praktischen Grund vorstellen, warum Sie dies jemals im Rahmen eines einzelnen Befehls wollen würden
Normalerweise benötigen Sie dies, wenn Sie einen Wert ersetzen müssen, der in einer langen Befehlszeile mehrfach verwendet wird.
Um beispielsweise eine Datei auf Nexus bereitzustellen (in mehreren Zeilen zur besseren Lesbarkeit):
cmd /v /c "set g=com.agroup&& set a=anArtifact&& set v=1.1.0&& \
mvn deploy:deploy-file -Dfile=C:\path\!a!-!v!.jar \
-Dpackaging=jar -DgroupId=!g! -DartifactId=!a! -Dversion=!v! \
-DrepositoryId=nexus
-Durl=http://myserver/nexus/content/repositories/my-repo/"
Anstatt Gruppe, Artefakt (zweimal verwendet) und Version in einer langen und komplexen Befehlszeile ersetzen zu müssen, können Sie diese an derAnfangdes besagten Befehls. Es ist klarer/einfacher, die Parameterwerte zu manipulieren und zu ändern.
Antwort2
Sie können es in einem solchen Windows tun, ohne dass Sie etwas installieren müssen.
cmd /C "set EDITOR=vim && set"
Sie sehen eine Liste mit Variablen und EDITOR=vim. Führen Sie „set“ jetzt erneut aus, und die Variablen werden nicht mehr aufgelistet.
Sie können mehrere &&'s verwenden, um zusätzliche Befehle hinzuzufügen:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
BEARBEITEN: /C beendet den neuen Befehl sofort nach der Ausführung. Wenn Sie mit dem neuen Befehl eine Ausgabe erzeugen, ist diese weiterhin im übergeordneten Fenster sichtbar.
Sie können optional /K verwenden. In diesem Fall bleibt das neue Befehlsfenster am Ende des Laufs geöffnet.
Antwort3
env
Sie können portierte Utilities aus dem Paket CoreUtils in GnuWin32 verwendenhttp://gnuwin32.sourceforge.net/
- Richten Sie es ein
- Überprüfen Sie, welches Verzeichnis
env.exe
in der Variable %PATH% vorhanden ist - Verwenden Sie es auf die gleiche Weise wie die Linux-Version
env EDITOR=vim command
Antwort4
Ich habe eine Batchdatei zusammengeschustert env.cmd
, die mehr oder weniger wie der Linux- env
Befehl funktioniert: -
echo off
setlocal
for %%f in (%*) do (
echo %%f|find "=" >nul:
if errorlevel 1 goto DoCmd
set %%f
shift
)
:DoCmd
%1 %2 %3 %4 %5 %6 %7 %8 %9
endlocal
Der einzige Unterschied besteht darin, dass cmd
die Umgebungszuweisungen aufgrund der Art und Weise der Analyse in Anführungszeichen gesetzt werden müssen. Ihr Befehl würde also folgendermaßen lauten:
env "EDITOR=vim" command [up to 8 parameters]
Die Batchdatei könnte erweitert werden, um die 8-Parameter-Einschränkung zu entfernen, indem die Befehlszeichenfolge innerhalb der for
Schleife erstellt wird (eine verzögerte Erweiterung ist erforderlich).