Dans Bash, je peux faire EDITOR=vim command
et command
seront exécutés avec EDITOR
défini sur vim
, mais cela n'affectera pas la valeur de EDITOR
dans le shell lui-même. Est-il possible de faire cela dans cmd.exe
?
Notez que cmd /C "set "EDITOR=vim" && echo %EDITOR%"
ne fonctionnerait pas.
Pas plus que cmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Quelle serait l'option /V
, pour activer le développement d'une variable d'environnement retardée en utilisant !
comme délimiteur.
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
Comme indiqué ci-dessous par maoizm , il s’agit de cmd /V /C
, pas cmd /C /V
(ce qui ne fonctionnerait pas )
Je ne vois aucune raison pratique de vouloir réellement cela dans le contexte d'une seule commande
En règle générale, 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 (sur plusieurs lignes, par souci 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 groupe, artefact (utilisé 2 fois) et version dans une ligne de commande longue et complexe, vous pouvez les modifier au début de ladite commande. Il est plus facile/clair de manipuler et de changer les valeurs des paramètres.
Vous pouvez le faire dans des fenêtres comme celle-ci 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, exécutez maintenant "set" à nouveau et il ne sera pas répertorié.
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 cmd immédiatement après son exécution. Si vous produisez une sortie avec la nouvelle, elle sera toujours visible dans la fenêtre parente.
Vous pouvez choisir d'utiliser/K, auquel cas la nouvelle fenêtre cmd reste ouverte à la fin de l'exécution.
vous pouvez utiliser ported util env
du paquet CoreUtils dans GnuWin32 http://gnuwin32.sourceforge.net/
env.exe
existe dans la variable% PATH%env EDITOR=vim command
J'ai créé un fichier batch env.cmd
qui fonctionne plus ou moins comme la commande Linux env
: -
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
analyse, les affectations d'environnement doivent être citées. Par conséquent, votre commande serait:
env "EDITOR=vim" command [up to 8 parameters]
Le fichier de commandes peut être élaboré pour supprimer la restriction de 8 paramètres en créant la chaîne de commande dans la boucle for
(un développement retardé sera nécessaire).