0

Windows コマンドライン スクリプトを使用しています。私がしたいのは、別のコマンド「B」によって出力として生成されるコマンド「A」を実行することです。コマンドを実行する前に、コマンドが存在するかどうかを最初に確認することもできます。ここで誰かがそれを行う方法を知っていますか? 前もって感謝します!

4

3 に答える 3

1
a.exe > tmp.cmd
CALL tmp.cmd
于 2012-06-21T12:03:56.703 に答える
1

古典的なアプローチは、 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引数を持つマクロの構文が大幅に改善された最新かつ最高の

于 2012-06-21T15:03:20.813 に答える
0

ほとんどの場合に機能する単純なアプローチは次のとおりです。

for /F "tokens=*" %%i in ('a.exe') do %%i

また

for /F "tokens=*"  %%i in ('a.exe') do if "%%i" NEQ "" %%i
于 2012-06-21T22:59:56.917 に答える