在 Bash 中,我可以設定為EDITOR=vim command
並將command
運行,但這不會影響shell 本身中的值。可以在 中執行此操作嗎?EDITOR
vim
EDITOR
cmd.exe
答案1
請注意,這是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'
# or
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
您可以像這樣在 Windows 中執行此操作,而無需安裝任何東西。
cmd /C "set EDITOR=vim && set"
你會看到一個變數列表,你會看到 EDITOR=vim,現在再次執行“set”,它不會被列出。
您可以執行多個 && 來新增其他命令:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
編輯: /C 在運行後立即退出新的 cmd,如果您使用新的 cmd 生成輸出,它將在父視窗中仍然可見。
您可以選擇使用 /K,在這種情況下,新的 cmd 視窗在運行結束時保持開啟。
答案3
您可以使用env
GnuWin32 中 CoreUtils 套件中移植的 utilhttp://gnuwin32.sourceforge.net/
- 設定它
env.exe
檢查%PATH% 變數中存在哪些目錄- 使用方法與linux版本相同
env EDITOR=vim command
答案4
我已經創建了一個批次文件env.cmd
,其工作方式或多或少類似於 Linuxenv
命令:-
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
(需要延遲擴展)。