4

次のようなログにリダイレクトされるバッチ ファイルがあるとします。

C:\Testing\Example.bat > C:\Testing\Example.log

ログファイルに標準出力リダイレクトが発生しているかどうかをバッチファイル内で判断する方法はありますか?

基本的に、私が持っているバッチ ファイルには 3 つの引数を渡す必要があります。引数が省略されている場合、バッチ ファイルは通常の Windows コマンドと同じように使用例を出力し、指示が​​読み取れるように「一時停止」をスローします。ただし、バッチが引数なしで呼び出され、ログに記録されている場合、バッチ ファイルはキーが一時停止を解除するのを永久に待機し、画面には何も表示されません。

通常、これはまったく問題にはなりませんが、他のスクリプト/スケジュールされたタスクでバッチ ファイルを実装するのは私ではないため、このばかげた証拠を作ろうとしています。

この時点で、使用の一時停止を完全に取り除く必要があるように思えますが、そうする必要のない解決策を望んでいました. 助けてくれてありがとう。

4

5 に答える 5

2

バッチおよび標準コマンドのみを使用してこれを行う方法を知りません。ただし、.bat と共に別の .exe を含めることが重要な場合は、ネイティブ C または C# プログラムなどの他の言語から使用できるトリックがあります。

  • ここに卑劣なアプローチがあります。このバッチ ファイルは .com ファイルを作成し、それを呼び出して stdout ハンドルをテストします: http://www.dostips.com/forum/viewtopic.php?f=3&t=2800

  • これは、単純な C# ヘルパー プログラムを作成する場合に、C# でそれを行う方法を説明してい ます。それはPowershellからも可能であるべきだと思いますが、私は試していません。

于 2013-03-20T20:57:51.470 に答える
0

標準の Windows バッチ ファイル (私が認識している) には、STDOUT がリダイレクトされている場所、またはリダイレクトされているかどうかを判断する方法がありません。ただし、使用例を STDOUT ではなく STDERR に書き出すと、少なくともファイルへの単純なリダイレクトでは使用情報が取得されません。

例 test.cmd:

@ECHO OFF

ECHO Test output 1>&2
PAUSE 1>&2

次に、それを呼び出します。

test.cmd > output.log

それでも出力されます:

Test output
Press any key to continue . . .

もちろん、STDERR がリダイレクトされてファイルが呼び出された場合、これは何もしません。

test.cmd 2> error.log
于 2013-03-20T21:01:21.350 に答える
0

あなたは間違った質問をしているだけだと思います。cmd モードのときに追加のブレークでバッチを終了する方法を見つけたいとします。一時停止せずにバッチモードで停止します。CMDpause を使用できます。これにより、cmdpause という名前の変数が作成され ます 。 /viewtopic.php?t=7257#p47510

デイブとジェブから何かがある。しかし、私にはリンクがありません。

フィル

于 2018-09-17T15:59:48.427 に答える