11

ユーザーがキャラクターを作成し、ストーリー内のキャラクターから名前などで呼び出される、独自のアドベンチャーストーリーを選択するためにBATCHファイルを使用しようとしています。ストーリーを含むBATCHファイルが実行されたとき、または実行された後に、すべてのECHOコマンドのログを作成して、後でプレーヤーが特定のプレイで行ったことを読み取れるようにすると、1時間前に私はクールだと思いました。

ログファイルを次のように読み取りたいと思います。

%date%%time%(ファイルが実行されている長さのechoコマンドによって表示されるすべてのテキスト)

残念ながら、私が理解できるのは、日付と時刻だけでログファイルを作成することだけです。「>>StoryLog.txt」を入力すると.txtファイルが作成され、そこに日付と時刻が表示されますが、バッチファイルをエコーされたtxtで表示したいものの後に「>>StoryLog.txt」というテキストが表示されます。 「あなたは道を北に行く>>StoryLog.txt」が画面に表示されます。これは当然機能しません。私は何をしますか?

4

4 に答える 4

7

この目的のために、私は以下を使用します:

set LogFile=somepath\logfile.txt
set logg=^> _^&type _^&type _^>^>%LogFile%
echo this goes to screen AND file! %logg%

これは少しトリッキーです。それでは、その行を 4 つの部分に分解しましょう。

set logg=      ^> _          ^&type _           ^&type _^>^>%LogFile%

行を一時ファイル (名前は_) に出力し (2 番目の部分)、そのファイルの内容を画面に入力し (3 番目の部分)、それをログファイルに入力します (4 番目の部分)。

そのすべてを変数 (最初の部分) に入れて、そのモンスター文字列をすべての行に入力する必要がないようにします。>(これが、 and&が でエスケープされる理由です^)

だから使うたびに

echo whatever %logg%

画面に表示され、書き込みます%logfile%

これも機能することに注意してください。

 %logg% echo whatever

djangofan を編集: また、関数を使用して行うこともできます。

@ECHO off
:: do not enable delayed expansion since it will break this method
SETLOCAL ENABLEEXTENSIONS
SET LogFile=logfile.out
SET Logg=^> tmp.out^&^& type tmp.out^&^&type tmp.out^>^>%LogFile%

CALL :logit "This is my message!"
CALL :logit "Hear my thunder?"

GOTO :end
:logit
ECHO %~1 %Logg%
DEL /Q tmp.out
EXIT /B 0
:end
pause

Stephan の編集: CALL を使用する%logg%と、やり過ぎになります。その場合、私はただ使用します:

:logit
echo %~1
echo %date%,%time% - %~1 >>logfile
exit /b 0

日付/時刻はログファイルに書き込まれますが、画面には書き込まれないため、これが元の質問に対する最良の解決策である可能性があります。ところで: 使用するたびに一時ファイルを削除する必要はありません。バッチが終了する直前に一度だけ削除してください。

于 2013-03-21T17:12:51.983 に答える
3

いくつかの編集のために私の他の答えがかなり長くなったので、ここに新しい提案があります(あまり変更されていませんが、コードが非常に読みやすくなります):

@ECHO off
SET LogFile=logfile.out
set "say=call :logit "

%say% "This is my message!"
%say% "Hear my thunder?"

GOTO :end
:logit
ECHO %~1 
echo %date% %time% - %~1 >>%logfile%
EXIT /B 0
:end
于 2013-03-22T08:29:45.827 に答える
0

echoプレーヤーが何が起こるかを知るたびechoに、ログファイルに行の先頭に日付と時刻を追加することもできます:)私にとっては簡単です。ただし、スクリプトがどのように見えるかはわかりません。

于 2013-03-21T15:23:29.360 に答える