最初に 2 番目の質問に答えるために、ファイル内の行数をすばやく取得する方法がいくつかあります。
メソッドの使用FIND.EXE
:
for /f %%x in ('type %FileName% ^| find /v /c ""') do set Lines=%%x
を使用する利点は、find.exe
mad のような任意のテキスト ファイルから zipps を検索し、空白行もカウントすることです。
メソッドの使用for
:
for /f %%x in (%FileName%) do set /a count=count+1
2 番目の方法の欠点は、for
ループが自動的に空白行をスキップすることです。この方法の利点は、ファイルに 1 回アクセスするだけでよいことです。
ファイルの各行を読み込んで操作するので、読み込むときに各行を数えた方が効率的です。
//
先に進む前に、これは Batch のコメント マークではなく、エラーの原因になることを指摘しておく必要があります。REM
、REMark コマンド、または 2 つのコロンのペアを使用::
して、コメントを示します。
setlocal enabledelayedexpansion
と行に注意してくださいendlocal
。SETLOCAL
すべての変数を一時的に作成し、スクリプトの実行中にのみ存在するようにすることで、スクリプトの最後ですべての変数をクリアする必要がなくなります。enableDelayedExpansion
表記法を使用!
できるようにし、 so: のように変数にアクセスできるようにします!Variable!
。最後endLocal
に、スクリプト内の WHERE を指定して、すべての一時変数を無効にするか、元の値に戻しsetlocal
ます。この行を削除すると、バッチ ファイルの終了時にendLocal
暗黙のメッセージが表示されます。endlocal
@Echo Off
setlocal enabledelayedexpansion
Set _InputFile=CONFIG.TXT
set count=
:: Sets each line to a vairable from _data1 to _data##
For /F "tokens=1* delims=:" %%A IN (%_InputFile%) DO (
set /a count=!count!+1
Set "_Data!count!=%%A"
)
:: Create a random number between 1 and %count% using the MOD function in 'set /a'
:: Equivalent to: SET /A n = aRandomNumber - ( theSameRandomNumber / %Count% ) + 1
:: See http://en.wikipedia.org/wiki/Mod_function
set /a n=%random% %% %count% +1
:: Echo # of lines, a random # from 1 to %count%, and a random line from the file:
echo.
echo =================================================
echo File is %count% lines deep
echo Random #: %n%
:: Print a random line of data
:: We are taking advantage of Delayed Expansion and ! notation:
Echo Random Line: "!_data%n%!"
echo.
:: Use SET to echo every line of data read in
echo Whole Set of _data[#] data:
set _data
echo.
endlocal
心に留めておくべきことの 1 つはCMD.EXE
、古い に固有の制限の一部がもたらされることMS-DOS
です。この場合、2 つの重要な制限があります。
1) 使用可能なメモリ量には厳しい制限があります。
2) 環境変数を設定すると、セッションで使用できるメモリが大量に使用されますCMD.EXE
。
これが意味することは、約 100 個_data
の変数の作成に制限されるため、その時点を超えるデータは変数に保存できないということです。
古いバージョンの Windows では、バッチ ファイル用の.PIF
ファイルを作成し (コマンド ラインで入力copy nul BatchName.PIF
し、Windows エクスプローラーで右クリックして [プロパティ] を選択)、実行時に割り当てられるメモリの量を変更できました。XPでもできると思いますが、Windows 7ではできないことを知っています。既存の .PIF ファイルをダウンロードしてバッチ ファイルに接続することは可能かもしれませんが、私にはわかりません。