2

失敗するスクリプトを実行しようとしています。問題を単純な TYPE コマンドに切り分けました。ここにコードがあります

IF NOT [%1]==[] ECHO Appending this log to %1
IF NOT [%1]==[] TYPE C:\test.log >> %1

ご覧のとおり、ログ ファイルが指定されている場合は、指定された場所にログ ファイルをコピーするだけです。スクリプトは、追加のログ ファイルが指定されていない場合にも実行する必要があります。

正しいように見え、さまざまなことを試したのでわかりません.パラメーターが渡された場合、スクリプトは正常に実行されます.

編集:その行をエコーし​​てみましたが、 IF NOT [] == [] TYPE C:\test.log 1>> のように表示されます

4

1 に答える 1

2

%1 が空の場合、IF が false と評価されて本体が実行されない場合でも、IF ステートメント全体に有効な構文が必要なため、スクリプトは失敗します。

"%~1"の代わりに にリダイレクトすることで問題を解決できます%1~値に既に存在する可能性のある囲み引用符を削除するには、 が必要です。へのリダイレクト""は有効な構文です。実行時エラーで失敗しますが、構文エラーではありません。ただし、%1 が空の場合は実行されないため、問題ありません。

"%~1"の代わりに IF 条件でも使用し[%1]ます。もう少し堅牢です。

単一の IF を使用するようにコードを再構成することもできますが、それはスタイルの問題です。

if not "%~1"=="" (
  echo Appending this log to %1
  type c:\test.log >>"%~1"
)
于 2012-08-01T19:45:53.393 に答える