5

STDOUT と STDERR の両方の出力をファイルにリダイレクトする DOSKEY マクロを定義しようとしています。doskey は、バッチ ファイルを実行することによって設定されます。次の場合にのみ、STDOUTに対してこれを行うことができます:

doskey logged_build=build $g build.log

ただし、典型的な 2>&1 オプション (以下のように) を使用して、STDERR 出力を同じファイルにリダイレクトすることもできません。

doskey logged_build=build $g build.log 2>&1

私も試してみました

doskey logged_build=build $g build.log 2$g&1

構文エラーが発生し、

doskey logged_build=build $g build.log 2$g build.log

別のプロセスで使用されているため、ファイルにアクセスできないというエラーが発生します。

これは、適切なマクロ ワイルドカードを使用すること (> の代わりに $g を使用するなど) だけの問題であると確信していますが、グーグルで何度も検索しましたが、まだ何も見つかりませんでした。だから私はあなたに私の仲間のSOFerに質問を投げかけます.

4

2 に答える 2

3

これはコマンド ラインで直接行うことはできませんが、マクロファイルを使用して行うことができdoskeyます。マクロファイルは、次のような紛らわしい魔法$gを使用する必要さえありません。それらはシェルの一部ではないため、シェルの特殊文字は通常どおり使用でき、マクロが定義される前にシェルによって解釈されるのではなく、マクロの定義に含まれます。

好きな場所 (例: %USERPROFILE%\mymacros.txt) にファイルを作成し、次の行をその中に入れます。

logged_build=build >build.log 2>&1

次に、次を実行してマクロをロードします。

doskey /MACROFILE=%USERPROFILE%\mymacros.txt

ファイルに多くのマクロを入れて、それらを一度にロードすることもできます。これにより、コマンド プロンプト全般のカスタマイズも簡単になります。既存のCommand Promptショートカットを変更するか、に基づいて新しいショートカットを作成して、cmd.exe次のようにすることができますTarget

%windir%\system32\cmd.exe /K doskey /MACROFILE=%USERPROFILE%\mymacros.txt

ショートカットをクリックすると、すべてのマクロがプリロードされたコマンド プロンプトが作成されます。ユーザーにインタラクティブなプロンプトを表示する前に、シェルで後続のコマンド/Kを実行するオプション。cmd.exeプロンプトがすべてのマクロを自動的に定義する場合、毎回マクロを設定する必要がなく、多くの手間が省けます。

cmd.exeまたは、個々のショートカットを変更する必要がないように、変更されたショートカットを使用せずに、直接呼び出されたとしても、何があってもマクロをロードするレジストリ キーを設定できます。とにかく走れ:

reg add "HKCU\Software\Microsoft\Command Processor" /v AutoRun /t REG_SZ /d "doskey /MACROFILE=%USERPROFILE%\mymacros.txt"

自分自身だけでなく、すべてのユーザーにグローバルに適用するように変更HKCUすることもできHKLMますが、その場合、マクロ ファイルを自分のユーザー プロファイルではなく、共通の場所に配置する必要があります。面倒なことに、REG_EXPAND_SZこのような場合に for を使用することはできません (これにより、変数を使用して、各ユーザーのプロファイル ディレクトリに関連するファイル%USERPROFILE%にグローバルHKLM設定を設定したり、プロファイルが再配置された場合を処理したりできます) が、うまく機能します。足りる。

于 2016-02-18T18:46:01.073 に答える