Dans Bash, je peux faire EDITOR=vim commandet commandserai exécuté avec EDITORset to vim, mais cela n’affectera pas la valeur de EDITORdans le shell lui-même. Est-il possible de faire cela dans cmd.exe?
Dans Bash, je peux faire EDITOR=vim commandet commandserai exécuté avec EDITORset to vim, mais cela n’affectera pas la valeur de EDITORdans 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' /Voption, 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' envutilitaire porté du paquet CoreUtils dans GnuWin32 http://gnuwin32.sourceforge.net/
env.exeexiste dans la variable% PATH%env EDITOR=vim commandJ'ai bricolé un fichier de commandes env.cmdqui fonctionne plus ou moins comme la envcommande 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 cmdanalyses 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 forboucle (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).