Dans Bash, je peux faire EDITOR=vim command
et command
serai exécuté avec EDITOR
set to 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
?
Dans Bash, je peux faire EDITOR=vim command
et command
serai exécuté avec EDITOR
set to 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
?
Réponses:
Notez que cmd /C "set "EDITOR=vim" && echo %EDITOR%"
cela ne fonctionnerait pas.
Ni seraitcmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Quelle serait l' /V
option, pour permettre l'expansion retardée des variables d'environnement en utilisant !
comme délimiteur.
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
Comme indiqué ci - dessous par maoizm , il est cmd /V /C
, pas cmd /C /V
(qui ne fonctionne)
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 cette commande. Il est plus facile / clair de manipuler et de changer les valeurs des paramètres.
'vim'
mais 'vim '
dans la dernière commande. Ajoutez les guillemets internes pour éviter tout espace à la fin.
cmd /v/c "..."
marche, mais cmd /c/v "..."
ça échoue - avec un peu de
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.
set name=foo&&echo %name%
ou set username=foo&&echo %username%
?
vous pouvez utiliser l' env
utilitaire porté du paquet CoreUtils dans GnuWin32 http://gnuwin32.sourceforge.net/
env.exe
existe dans la variable% PATH%env EDITOR=vim command
J'ai bricolé un fichier de commandes env.cmd
qui fonctionne plus ou moins comme la env
commande Linux : -
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 qu'en raison de la façon dont les cmd
analyses sont effectuées, les assignations d'environnement doivent être citées. Votre commande serait donc:
env "EDITOR=vim" command [up to 8 parameters]
Le fichier de commandes pourrait être élaboré pour supprimer la restriction de 8 paramètres en créant la chaîne de commande dans la for
boucle (une expansion retardée sera nécessaire).
%*
l'avant-dernière ligne (c'est-à-dire celle qui suit l' :DoCmd
étiquette) pour autoriser des commandes utilisateur très longues?
%*
est la liste de paramètres d' origine : elle n'est pas affectée par shift
(contrairement $*
à Unix).