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"
編集:/ Cは、実行後すぐに新しいcmdを終了します。新しいもので出力を生成する場合、親ウィンドウに表示されます。
/ Kの使用を選択できます。この場合、実行の終了時に新しいcmdウィンドウが開いたままになります。
set name=foo&&echo %name%かset username=foo&&echo %username%?
envGnuWin32 http://gnuwin32.sourceforge.net/のパッケージCoreUtilsから移植されたユーティリティを使用できます。
env.exe%PATH%変数に存在するディレクトリを確認しますenv EDITOR=vim commandenv.cmdLinux 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]
バッチファイルは、forループ内でコマンド文字列を作成することにより、8パラメーターの制限を取り除くために作成できます(遅延展開が必要になります)。
%*最後から2番目の行(つまり、:DoCmdラベルの後の行)として使用して、非常に長いユーザーコマンドを許可しないのでしょうか。
%*、影響を受けません(Unix とは異なります)。shift$*