In Bash kann EDITOR=vim command
und command
wird mit EDITOR
set to ausgeführt vim
, dies hat jedoch keinen Einfluss auf den Wert EDITOR
in der Shell. Ist es möglich, dies in zu tun cmd.exe
?
In Bash kann EDITOR=vim command
und command
wird mit EDITOR
set to ausgeführt vim
, dies hat jedoch keinen Einfluss auf den Wert EDITOR
in der Shell. Ist es möglich, dies in zu tun cmd.exe
?
Antworten:
Beachten Sie, dass cmd /C "set "EDITOR=vim" && echo %EDITOR%"
dies nicht funktionieren würde.
Wäre es auch nichtcmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Was wäre die /V
Option, die verzögerte Erweiterung von Umgebungsvariablen mit !
als Begrenzer zu aktivieren .
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
Wie unten angegeben von maoizm ist es cmd /V /C
, nicht cmd /C /V
(das würde nicht funktionieren)
Ich kann mir keinen praktischen Grund vorstellen, warum Sie dies jemals im Kontext eines einzelnen Befehls wollen würden
In der Regel benötigen Sie dies, wenn Sie einen Wert ersetzen müssen, der in einer langen Befehlszeile mehrfach verwendet wird.
So stellen Sie beispielsweise eine Datei für Nexus bereit (aus Gründen der Lesbarkeit in mehreren Zeilen):
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 (2-mal verwendet) und Version in einer langen und komplexen Befehlszeile ersetzen zu müssen, können Sie sie am Anfang des Befehls bearbeiten . Es ist übersichtlicher / einfacher, die Parameterwerte zu manipulieren und zu ändern.
'vim'
sondern 'vim '
auf den letzten Befehl gesetzt wird. Fügen Sie die internen Anführungszeichen hinzu, um das Leerzeichen am Ende zu vermeiden.
cmd /v/c "..."
funktioniert, cmd /c/v "..."
scheitert aber - hoffentlich kann es Ihnen 15 Minuten sparen
Sie können dies in solchen Fenstern tun, ohne etwas installieren zu müssen.
cmd /C "set EDITOR=vim && set"
Sie sehen eine Liste mit Variablen und sehen EDITOR = vim. Führen Sie jetzt "set" erneut aus und es wird nicht aufgelistet.
Sie können mehrere && ausführen, um zusätzliche Befehle hinzuzufügen:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
BEARBEITEN: / C beendet den neuen Befehl sofort nach dem Ausführen. Wenn Sie eine Ausgabe mit dem neuen Befehl erstellen, wird dieser weiterhin im übergeordneten Fenster angezeigt.
Sie können / K verwenden. In diesem Fall bleibt das neue cmd-Fenster am Ende des Laufs geöffnet.
set name=foo&&echo %name%
oder set username=foo&&echo %username%
?
Sie können portiertes Util env
aus dem Paket CoreUtils in GnuWin32 verwenden. http://gnuwin32.sourceforge.net/
env.exe
in der Variablen% PATH% vorhanden istenv EDITOR=vim command
Ich habe eine Batch-Datei hochgefahren, 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 aufgrund der Art cmd
und Weise der Analyse die Umgebungszuweisungen in Anführungszeichen gesetzt werden müssen. Ihr Befehl lautet also :
env "EDITOR=vim" command [up to 8 parameters]
Die Batch-Datei könnte ausgearbeitet werden, um die 8-Parameter-Einschränkung zu beseitigen, indem die Befehlszeichenfolge innerhalb der for
Schleife aufgebaut wird (eine verzögerte Erweiterung ist erforderlich).
%*
als vorletzte Zeile (dh nach der :DoCmd
Bezeichnung) verwenden, um sehr lange Benutzerbefehle zu ermöglichen?
%*
es sich um die ursprüngliche Parameterliste handelt: Sie wird von shift
(im Gegensatz $*
zu Unix) nicht beeinflusst.