В Bash я могу сделать EDITOR=vim command
и command
буду работать с EDITOR
установленным значением vim
, но это не повлияет на значение EDITOR
в самой оболочке. Возможно ли сделать это в cmd.exe
?
В Bash я могу сделать EDITOR=vim command
и command
буду работать с EDITOR
установленным значением vim
, но это не повлияет на значение EDITOR
в самой оболочке. Возможно ли сделать это в cmd.exe
?
Ответы:
Обратите внимание, cmd /C "set "EDITOR=vim" && echo %EDITOR%"
что не будет работать.
И не будетcmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Что бы это был /V
вариант, чтобы включить отложенное расширение переменной среды, используя в !
качестве разделителя.
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
Как отмечено ниже по maoizm , это cmd /V /C
, не cmd /C /V
(что бы не работать)
Я не могу придумать ни одной практической причины, по которой вы бы хотели этого в контексте одной команды.
Как правило, это необходимо, когда вам нужно заменить значение, используемое несколько раз в длинной командной строке.
Например, чтобы развернуть файл в Nexus (в несколько строк для удобства чтения):
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/"
Вместо того, чтобы заменять группу, артефакт (используется 2 раза) и версию в длинной и сложной командной строке, вы можете редактировать их в начале указанной команды. Проще / проще манипулировать и изменять значения параметров.
'vim'
но 'vim '
в последней команде. Добавьте внутренние кавычки, чтобы избежать пробела в конце.
cmd /v/c "..."
работает, но cmd /c/v "..."
не получается - надеюсь, это
Вы можете сделать это в Windows, как это, не нужно ничего устанавливать.
cmd /C "set EDITOR=vim && set"
Вы увидите список переменных и увидите EDITOR = vim, теперь снова запустите «set», и его не будет в списке.
Вы можете сделать несколько && для добавления дополнительных команд:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
РЕДАКТИРОВАТЬ: / C выходит из нового cmd сразу после запуска, если вы производите вывод с новым, он все еще будет виден в родительском окне.
Вы можете использовать / K, и в этом случае новое окно cmd остается открытым в конце цикла.
set name=foo&&echo %name%
или set username=foo&&echo %username%
?
вы можете использовать перенесенный env
утилит из пакета CoreUtils в GnuWin32 http://gnuwin32.sourceforge.net/
env.exe
существует в переменной% PATH%env EDITOR=vim command
Я поднял пакетный файл, env.cmd
который работает более или менее как команда 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
Единственное отличие состоит в том, что из-за способа cmd
синтаксического анализа, назначения среды должны быть заключены в кавычки, поэтому ваша команда будет:
env "EDITOR=vim" command [up to 8 parameters]
Пакетный файл может быть разработан для снятия ограничения на 8 параметров путем создания командной строки в for
цикле (потребуется отложенное расширение).
%*
в качестве предпоследней строки (т. Е. Строку после :DoCmd
метки), чтобы учесть очень длинные пользовательские команды?
%*
это оригинальный список параметров: он не подвержен влиянию shift
(в отличие от $*
Unix).