W Bash mogę zrobić EDITOR=vim commandi commandbędę działać z EDITORustawionym na vim, ale nie wpłynie to na wartość EDITORsamej powłoki. Czy można to zrobić w cmd.exe?
W Bash mogę zrobić EDITOR=vim commandi commandbędę działać z EDITORustawionym na vim, ale nie wpłynie to na wartość EDITORsamej powłoki. Czy można to zrobić w cmd.exe?
Odpowiedzi:
Pamiętaj, że cmd /C "set "EDITOR=vim" && echo %EDITOR%"to nie zadziała.
Nie zrobiłbym tegocmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Jaką /Vopcją byłoby włączenie opóźnionego rozszerzania zmiennych środowiskowych za pomocą !ogranicznika.
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
Jak wspomniano poniżej przez maoizm , to jest cmd /V /C, nie cmd /C /V (co nie działa)
Nie mogę wymyślić żadnego praktycznego powodu, dla którego kiedykolwiek chciałbyś tego w kontekście jednego polecenia
Zazwyczaj jest to potrzebne, gdy trzeba zastąpić wartość używaną wielokrotnie w długim wierszu polecenia.
Na przykład, aby wdrożyć plik w Nexusie (w wielu wierszach dla czytelności):
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/"
Zamiast konieczności zastępowania grupy, artefaktu (używanego 2 razy) i wersji w długim i złożonym wierszu poleceń, możesz edytować je na początku tego polecenia. Przejrzystsze / łatwiejsze do manipulowania i zmiany wartości parametrów.
'vim'ale 'vim 'na ostatnim poleceniu. Dodaj cytaty wewnętrzne, aby na końcu uniknąć spacji.
cmd /v/c "..." działa, ale cmd /c/v "..."kończy się niepowodzeniem - mam nadzieję, że może zaoszczędzić 15 minut
Możesz to zrobić w systemie Windows, bez potrzeby instalowania czegokolwiek.
cmd /C "set EDITOR=vim && set"
Zobaczysz listę zmiennych i zobaczysz EDITOR = vim, teraz uruchom ponownie „set” i nie będzie na liście.
Możesz dodać wiele znaków &&, aby dodać dodatkowe polecenia:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
EDYCJA: / C kończy pracę z nowym cmd od razu po uruchomieniu, jeśli utworzysz dane wyjściowe przy użyciu nowego, nadal będzie ono widoczne w oknie nadrzędnym.
Możesz zdecydować się na użycie / K, w którym to przypadku nowe okno cmd pozostaje otwarte na końcu przebiegu.
set name=foo&&echo %name%czy set username=foo&&echo %username%?
możesz użyć przeniesionego narzędzia envz pakietu CoreUtils w GnuWin32 http://gnuwin32.sourceforge.net/
env.exeistnieje zmienna% PATH%env EDITOR=vim commandPodniosłem plik wsadowy, env.cmdktóry działa mniej więcej tak, jak envpolecenie 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
Jedyną różnicą jest to, że ze względu na sposób cmdanalizowania przypisania środowiska muszą być cytowane, więc twoje polecenie będzie:
env "EDITOR=vim" command [up to 8 parameters]
Plik wsadowy można opracować w celu usunięcia ograniczenia 8-parametrowego poprzez utworzenie ciągu poleceń w forpętli (konieczne będzie opóźnione rozszerzenie).
%*jako przedostatniej linii (tj. Następnej po :DoCmdetykiecie), aby pozwolić na bardzo długie polecenia użytkownika?
%*jest to oryginalna lista parametrów: nie ma na nią wpływu shift(inaczej niż $*w Uniksie).