0

Win XPで実行されている、テキストファイルを出力するcmdスクリプトがあります。

:start
>outputfile.txt (findstr /v "^#" info.txt || echo No text available)
ping 127.0.0.1
goto start

info.txt内のデータをチェックし、#で始まらない場合は、同じテキストを含むoutputfile.txtを作成します。pingは、単純な遅延戦術として使用されます。

ここで、info.txtからデータを取得して(#で始まらない場合)、すでにoutputfile.txtにあるものに追加するようなものが必要です。ただし、info.txtのテキストが変更された場合に限ります。(>を>>に変更すると、同じテキストが何度も繰り返されます)。

これは私の脳を傷つけています。いくつかの指針を教えてください。ありがとう。

4

1 に答える 1

0
@echo off

set DataFile=info.txt
set OutputFile=outputfile.txt
set SavedSize=0

goto start

:filesize
set CurrentSize=%~z1
exit /b

:start
call :filesize %DataFile%
if %SavedSize% neq %CurrentSize% (>%OutputFile% (findstr /v "^#" %DataFile% || echo No text available))
set SavedSize=%CurrentSize%
ping 127.0.0.1 >nul
goto start

以前のデータファイルサイズを保存し、変更されるまで待つという考え方です。

これは理想的な解決策ではなく(ファイルを変更するたびにすべてのデータをコピーする必要があるため) 、スクリプトの実行中にinfo.txt誰かが行を削除すると、正しく機能しない可能性があります。info.txtいくつかのハッシュアルゴリズム(MD5など)を使用することをお勧めしますが、残念ながら、CMDツールの標準セットには適切なものが含まれていません。

これらの制限が重要な場合は、コマンドラインハッシュユーティリティ(例:this)またはより強力なスクリプト言語(Python、Perl、Powershell)を使用することをお勧めします。

于 2012-09-21T02:00:48.223 に答える