Windows コマンドライン スクリプトを使用しています。私がしたいのは、別のコマンド「B」によって出力として生成されるコマンド「A」を実行することです。コマンドを実行する前に、コマンドが存在するかどうかを最初に確認することもできます。ここで誰かがそれを行う方法を知っていますか? 前もって感謝します!
3 に答える
a.exe > tmp.cmd
CALL tmp.cmd
古典的なアプローチは、 Eugen Rieck が提案したように、出力をスクリプト ファイルにリダイレクトすることです。一時フォルダーに書き込み、終了時に一時スクリプトを削除することで、これを調整できます。一時スクリプト名に乱数を組み込んで、スクリプトの 2 つの同時インスタンスが互いに干渉しないようにしています。
@echo off
setlocal
set script="%temp%\temp%random%.bat"
commandA >%script%
call %script%
del %script%
commandA は出力を生成しない場合があります。空のスクリプトを実行しても、エラーは発生しません。ただし、必要に応じて、次の方法でスクリプトが空であることを検出できます。
for %%A in (%script%) do if %%~zA equ 0 echo The script is empty.
スクリプトは、複数のコマンドを使用して構築できます。
commandA >%script%
commandB >>%script%
commandC >>%script%
またはより効率的に:
>%script% (
commandA
commandB
commandC
)
非古典的なアプローチは、コマンドをスクリプト ファイルではなく変数に格納し、展開された値をマクロとして実行することです。マクロの実行は、すべてメモリ ベースであるため、スクリプトの実行よりも大幅に高速になる場合があります。しかし、機能するマクロを正常に構築するためのルールは、スクリプトを構築するよりも複雑です。また、マクロは最大 8191 文字 (バイト) (バッチ環境変数の最大長) に制限されています。
引数を受け取って値を返すマクロを作成することさえ可能です!
DOSTips サイトでは、バッチ マクロを使用して膨大な量の作業が行われています。試してみたい場合は、次の 2 つの重要なリファレンスを参照してください。
http://www.dostips.com/forum/viewtopic.php?p=7330 コンセプトの発展と主要なコンポーネントの多くを示す良い出発点
http://www.dostips.com/forum/viewtopic.php?p=11344引数を持つマクロの構文が大幅に改善された最新かつ最高の
ほとんどの場合に機能する単純なアプローチは次のとおりです。
for /F "tokens=*" %%i in ('a.exe') do %%i
また
for /F "tokens=*" %%i in ('a.exe') do if "%%i" NEQ "" %%i