У 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 "..."
не вдається - сподіваємось, це може заощадити 15 хвилин
Ви можете це робити у таких вікнах, що немає необхідності нічого встановлювати.
cmd /C "set EDITOR=vim && set"
Ви побачите список змінних, і ви побачите EDITOR = vim, тепер знову запустіть "set" і він не буде в списку.
Ви можете зробити кілька &&, щоб додати додаткові команди:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
EDIT: / 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).