2017-02-03 10 views
-3

最初の行がエコーをオフにする読み取り専用スクリプトがあります。内容の例script.batについて:エコーを無視してコマンド実行ログを取得する方法

@echo off 
REM bunch of logic goes here 
@echo on 

は、それが何らかの形でそれをだまし、すべてのコマンドは、とにかく印刷/エコー取得することはできますか? 私はスクリプト呼び出しの前/後に何かを呼び出すことができます。ただスクリプトコード自体を変更することはできません。読み取り専用バッチファイルは、ファイルをコピー@echo offを削除し、コピーしたファイルを実行することであること、

REM what can I do here? 
call script.bat 
REM execution log printed? 
+4

'@echo off'だけというコマンドをエコー無効にしますコマンドの出力ではなく、実行されます。 'bla bla'は' @echo off'の有無にかかわらず表示されます –

+0

@MCND申し訳ありませんが、この例はあまり単純化されていません。実際の意図を反映するために質問を編集しました。 – Andrey

答えて

1

それを行うための簡単な方法:私はそれがこのようなものになるだろうと想像します。

これができない場合は、buffer overflowがJebによって発見されたものを試すことができます。次コンテンツ

((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

(ビット以上256のかっこ)でバッチファイルを作成し、cmdインスタンスを開いて、それを実行します。同じcmdインスタンスから、script.batを呼び出します。 バッファオーバーフローが干渉しない場合、コマンドが実行されるのを見ることができます。

この時点で私は別の方法を覚えていません。

注::完了のためだけに、あなたが求めるのは技術的に可能ですが、直接解決できません。以前は、バッチファイルの呼び出しに関する質問を解決するために、gotoコマンドとラベルを実行しましたが、cmd.exeプロセスのコピーをパッチして実行するコマンドを出力するタイミングを逃しましたが、このプロセスはcmd実行可能ファイルの正確なバージョン。

+0

美しい!バッファオーバーフローは魅力のように働きます。私は次のようにしました:256の開始括弧を持つ1つのスクリプト、 'call cmd-overflow.bat'を実行するメインスクリプト、そして' call script-to-debug.bat'を実行し、すべての詳細が表示されます。 – Andrey

1

この長いコマンドはsample.batライン・バイ・ラインを読み込み、明示的@echo offを言っていない行ごとに、それが効果的@echo offをスキップし、それを実行します。

@for /F "tokens=*" %a in (sample.bat) do @if NOT "%a" == "@echo off" %a 

それは、コマンドエコーをオフにする卑劣な方法があり、複雑なバットファイルのための完璧ではないかもしれないが、それは最も基本的な例で動作するはずです:

関連する問題