En Bash, je peux faire EDITOR=vim command
y command
sera exécuté avec EDITOR
réglé sur vim
mais cela n'affectera pas la valeur de l'option EDITOR
dans le Shell lui-même. Est-il possible de le faire dans cmd.exe
?
Réponses
Trop de publicités?Notez que cmd /C "set "EDITOR=vim" && echo %EDITOR%"
ne fonctionnerait pas.
Pas plus que cmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Vous auriez besoin :
- el
/V
pour activer l'expansion différée des variables d'environnement en utilisant!
comme délimiteur. - pas d'espace entre une commande et le
&&
(ou ajouter des citations)
C'est-à-dire :
C:\> cmd /V /C "set EDITOR=vim&& echo '!EDITOR!'"
'vim'
# or
C:\> cmd /V /C "set "EDITOR=vim" && echo '!EDITOR!'"
'vim'
Comme noté ci-dessous por maoizm c'est cmd /V /C
, no cmd /C /V
(ce qui no travail)
Je ne vois aucune raison pratique pour laquelle vous voudriez que cela soit fait dans le cadre d'une seule commande.
En général, vous en avez besoin lorsque vous devez remplacer une valeur utilisée plusieurs fois dans une longue ligne de commande.
Par exemple, pour déployer un fichier sur Nexus (en plusieurs lignes pour plus de lisibilité) :
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/"
Au lieu de devoir remplacer le groupe, l'artefact (utilisé 2 fois) et la version dans une ligne de commande longue et complexe, vous pouvez les éditer à l'adresse suivante débutant de ladite commande. Il est plus clair/facile de manipuler et de modifier les valeurs des paramètres.
Vous pouvez le faire dans Windows comme ceci sans avoir besoin d'installer quoi que ce soit.
cmd /C "set EDITOR=vim && set"
Vous verrez une liste de variables et vous verrez EDITOR=vim, maintenant lancez "set" à nouveau et il ne sera pas listé.
Vous pouvez faire plusieurs && pour ajouter des commandes supplémentaires :
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
EDIT : /C quitte la nouvelle commande immédiatement après son exécution, si vous produisez une sortie avec la nouvelle commande, elle sera toujours visible dans la fenêtre parent.
Vous pouvez choisir d'utiliser /K, auquel cas la nouvelle fenêtre cmd reste ouverte à la fin de l'exécution.
Vous pouvez utiliser des utilitaires portés env
du paquet CoreUtils dans GnuWin32 http://gnuwin32.sourceforge.net/
- Configurez-le
- Vérifiez quel répertoire avec
env.exe
existe dans la variable %PATH - Utiliser de la même manière que la version linux
env EDITOR=vim command
La réponse de Vonc fonctionnera pour les commandes qui font référence à la variable telle qu'elle est développée (c'est-à-dire !FOO!
au lieu de %FOO%
)
Cependant, cela ne fonctionnera pas si votre commande fait référence à une variable ordinaire.
Par exemple, considérez :
some-bat.bat (ou tout autre exécutable/processus batch)
echo %FOO%
Et le processus principal :
set FOO=foo
cmd /V /C "set FOO=bar && some-bat.bat"
Renvoie à foo
au lieu de bar
(une deuxième exécution fonctionnerait quand même)
Mais tout de même, vous pourriez concaténer un nouveau processus cmd pour forcer le rafraîchissement de la variable.
Comme ça :
set "FOO=BAR" && cmd /c "echo %FOO%"
Ou dans le cas où la commande principale devait déjà utiliser une nouvelle cmd :
cmd /c "set FOO=BAR && cmd /c ^"echo %FOO%^""
J'ai créé un fichier batch env.cmd
qui fonctionne plus ou moins comme le système Linux env
commande:-
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
La seule différence est que, en raison de la façon dont cmd
est analysé, les affectations d'environnement doivent être citées, donc votre commande serait :
env "EDITOR=vim" command [up to 8 parameters]
Le fichier batch peut être élaboré pour supprimer la restriction des 8 paramètres en construisant la chaîne de commande dans le fichier de base. for
boucle (une extension différée sera nécessaire).