Linux のようなバックティック/バッククォート機能がないことは、PowerShell 以前の世界の大きな悩みの種です。for ループを介して逆引用符を使用するのは、まったく快適ではありません。そのため、ちょっとしたsetvar myvar cmd-line
コマンドが必要です。
私の%path%
中には、これらのWinの欠点に対処するために、多数のビンとバッチを含むディレクトリがあります。
私が書いた1つのバッチは次のとおりです。
:: setvar varname cmd
:: Set VARNAME to the output of CMD
:: Triple escape pipes, eg:
:: setvar x dir c:\ ^^^| sort
:: -----------------------------
@echo off
SETLOCAL
:: Get command from argument
for /F "tokens=1,*" %%a in ("%*") do set cmd=%%b
:: Get output and set var
for /F "usebackq delims=" %%a in (`%cmd%`) do (
ENDLOCAL
set %1=%%a
)
:: Show results
SETLOCAL EnableDelayedExpansion
echo %1=!%1!
したがって、あなたの場合、次のように入力します。
> setvar text echo Hello
text=Hello
スクリプトによって結果が通知されます。これは、次のことができることを意味します。
> echo text var is now %text%
text var is now Hello
どんなコマンドでも使用できます:
> setvar text FIND "Jones" names.txt
ある変数にパイプしたいコマンド自体にパイプが含まれている場合はどうなるでしょうか?
トリプルエスケープ、^^^|
:
> setvar text dir c:\ ^^^| find "Win"