在 Windows cmd.exe 的相同命令列中設定和使用變數

在 Windows cmd.exe 的相同命令列中設定和使用變數

在 Bash 中,我可以設定為EDITOR=vim command並將command運行,但這不會影響shell 本身中的值。可以在 中執行此操作嗎?EDITORvimEDITORcmd.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

您可以使用envGnuWin32 中 CoreUtils 套件中移植的 utilhttp://gnuwin32.sourceforge.net/

  1. 設定它
  2. env.exe檢查%PATH% 變數中存在哪些目錄
  3. 使用方法與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(需要延遲擴展)。

相關內容