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
、notcmd /C /V
(これはnot動作しません)
私はあなたが実際にこれを単一のコマンドの文脈の中で欲しいと思う実用的な理由を考えることはできません。
通常、長いコマンドラインで複数回使用された値を置き換える必要があるときにこれが必要になります。
例えば、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/"
長く複雑なコマンドラインでgroup、artifact(2回使用)、versionを置き換えなくても、上記のコマンドの先頭で編集できます。パラメータ値を操作して変更する方が明確で簡単です。
あなたは何もインストールする必要はありませんこのようにWindowsでそれを行うことができます。
cmd /C "set EDITOR=vim && set"
変数のリストが表示され、EDITOR = vimが表示されます。今度はもう一度 "set"を実行します。リストには表示されません。
追加のコマンドを追加するために複数の&&を行うことができます。
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
編集:/ Cは、実行後すぐに新しいcmdを終了します。新しいコマンドを使用して出力を生成した場合は、親ウィンドウに表示されたままになります。
/ Kを使用することを選択できます。その場合、新しいcmdウィンドウは実行の終了時に開いたままになります。
gnuWin32のCoreUtilsパッケージから移植されたutil env
を使用できます http://gnuwin32.sourceforge.net/
env.exe
を持つディレクトリが存在するか確認してくださいenv EDITOR=vim command
と同じように使う私はLinuxのenv
コマンドのように動作するバッチファイルenv.cmd
をノックアップしました: -
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]
for
ループ内にコマンド文字列を作成することで、バッチファイルを詳しく説明して8パラメータの制限をなくすことができます(遅延展開が必要になります)。