62

В Bash я могу выполнить EDITOR=vim command и command будет выполняться с установленным для EDITOR значением vim , но это не повлияет на значение EDITOR в самой оболочке. Возможно ли это сделать в cmd.exe?

4 ответа4

46

Вы можете сделать это в Windows, как это, не нужно ничего устанавливать.

cmd /C "set EDITOR=vim && set"

Вы увидите список переменных и увидите EDITOR = vim, теперь снова запустите "set", и его не будет в списке.

Вы можете сделать несколько && для добавления дополнительных команд:

cmd /C "set EDITOR=vim && do this && do that && otherstuff"

РЕДАКТИРОВАТЬ:/C выходит из нового cmd сразу после запуска, если вы производите вывод с новым, он все равно будет виден в родительском окне.

Вы можете использовать /K, и в этом случае новое окно cmd остается открытым в конце цикла.

44

Обратите внимание, что 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

Как отметил ниже маоизм, это 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 раза) и версию в длинной и сложной командной строке, вы можете редактировать их в начале указанной команды. Проще / проще манипулировать и изменять значения параметров.

7

вы можете использовать портированный util env из пакета CoreUtils в GnuWin32 http://gnuwin32.sourceforge.net/

  1. Настройте это
  2. Проверьте, какой каталог с env.exe существует в переменной% PATH%
  3. Используйте тот же способ, что и в Linux-версии env EDITOR=vim command
3

Я поднял пакетный файл 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 (потребуется отложенное расширение).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .