バッチ ファイルを使用して .cfg ファイルの特定のセクションを見つけ、それを変数として使用しようとしています。
具体的には、Idapi32.cfg (Borland 構成ファイル) を読み取って、その中のエイリアスへのパスを見つけようとしています。
これをきちんと行う方法が思いつかなかったので、これをやろうとしました:
- CMD の TYPE 機能を使用して、.cfg ファイルを文字列 (1 行のテキスト) として取得し、この文字列を変数
- その変数の最初の 5 文字を取得し、IF string1==string2 を使用して、最初の 5 文字が必要なセクションである
かどうかを確認します。そうでない場合は、変数をリセットして、最初の文字を引いた同じになるようにし、もう一度確認します。
ループが機能していることを確認できるため、ループが機能することはわかっていますが、実行ごとに異なる結果が得られる理由がわかりません
TYPE "C:\programdata\borland shared\bde\idapi32.cfg"
と
for /f "usebackq tokens=* delims==" %%a in (`type "c:\programdata\borland shared\bde\idapi32.cfg"`) do (echo %%a)
エコーはTYPEコマンドの結果と同じであると思いますか?? それとも私は何かを逃していますか??
編集
結果の違いを示すために、TYPE と FOR の結果を追加しました
C:\>type "C:\programdata\borland shared\bde\idapi32.cfg"
♥ DRIVERS ☺ ♥ PARADOX ☺ ♥ INIT ☺ ♥ ☺ NET DIR ♦ W:\WINFILES ☻ ☻ ☻ ♥ DATAB
ASES ☺ ♥ MS Access Database ☺ ♥ DB OPEN ☺ ♥ ☺ DATABASE NAME ♦ ♥ ☺ USER NAME
♦ ♥ ☺ ODBC DSN ♦ MS Access Database ♥ ☺ OPEN MODE ♦ READ/WRITE ♥ ☺ SCHEMA CACH
E SIZE ♦ 8 ♥ ☺ SQLQRYMODE ♦ ♥ ☺ LANGDRIVER ♦ ♥ ☺ SQLPASSTHRU MODE ♦ SHARED AUT
OCOMMIT ♥ ☺ SCHEMA CACHE TIME ♦ -1 ♥ ☺ MAX ROWS ♦ -1 ♥ ☺ BATCH COUNT ♦ 200 ♥ ☺ E
NABLE SCHEMA CACHE ♦ FALSE ♥ ☺ SCHEMA CACHE DIR ♦ ♥ ☺ ENABLE BCD ♦ FALSE ♥ ☺ RO
WSET SIZE ♦ 20 ♥ ☺ BLOBS TO CACHE ♦ 64 ☻ ♥ DB INFO ☺ ♥ ☺ TYPE ♦ Microsoft Acce
ss Driver (*.mdb) ♥ ☺ PATH ♦ ☻ ☻ ♥ Excel Files ☺ ♥ DB OPEN ☺ ♥ ☺ DATABASE N
AME ♦ ♥ ☺ USER NAME ♦ ♥ ☺ ODBC DSN ♦ Excel Files ♥ ☺ OPEN MODE ♦ READ/WRITE ♥
☺ SCHEMA CACHE SIZE ♦ 8 ♥ ☺ SQLQRYMODE ♦ ♥ ☺ LANGDRIVER ♦ ♥ ☺ SQLPASSTHRU MODE
♦ SHARED AUTOCOMMIT ♥ ☺ SCHEMA CACHE TIME ♦ -1 ♥ ☺ MAX ROWS ♦ -1 ♥ ☺ BATCH COUN
T ♦ 200 ♥ ☺ ENABLE SCHEMA CACHE ♦ FALSE ♥ ☺ SCHEMA CACHE DIR ♦ ♥ ☺ ENABLE BCD ♦
FALSE ♥ ☺ ROWSET SIZE ♦ 20 ♥ ☺ BLOBS TO CACHE ♦ 64 ☻ ♥ DB INFO ☺ ♥ ☺ TYPE ♦ M
icrosoft Excel Driver (*.xls) ♥ ☺ PATH ♦ ☻ ☻ ♥ dBASE Files ☺ ♥ DB OPEN ☺ ♥
☺ DATABASE NAME ♦ ♥ ☺ USER NAME ♦ ♥ ☺ ODBC DSN ♦ dBASE Files ♥ ☺ OPEN MODE ♦ R
EAD/WRITE ♥ ☺ SCHEMA CACHE SIZE ♦ 8 ♥ ☺ SQLQRYMODE ♦ ♥ ☺ LANGDRIVER ♦ ♥ ☺ SQLP
ASSTHRU MODE ♦ SHARED AUTOCOMMIT ♥ ☺ SCHEMA CACHE TIME ♦ -1 ♥ ☺ MAX ROWS ♦ -1 ♥
☺ BATCH COUNT ♦ 200 ♥ ☺ ENABLE SCHEMA CACHE ♦ FALSE ♥ ☺ SCHEMA CACHE DIR ♦ ♥ ☺
ENABLE BCD ♦ FALSE ♥ ☺ ROWSET SIZE ♦ 20 ♥ ☺ BLOBS TO CACHE ♦ 64 ☻ ♥ DB INFO ☺
♥ ☺ TYPE ♦ Microsoft dBase Driver (*.dbf) ♥ ☺ PATH ♦ ☻ ☻ ♥ Text Files ☺ ♥ D
B OPEN ☺ ♥ ☺ DATABASE NAME ♦ ♥ ☺ USER NAME ♦ ♥ ☺ ODBC DSN ♦ Text Files ♥ ☺ OPE
N MODE ♦ READ/WRITE ♥ ☺ SCHEMA CACHE SIZE ♦ 8 ♥ ☺ SQLQRYMODE ♦ ♥ ☺ LANGDRIVER ♦
♥ ☺ SQLPASSTHRU MODE ♦ SHARED AUTOCOMMIT ♥ ☺ SCHEMA CACHE TIME ♦ -1 ♥ ☺ MAX ROWS
♦ -1 ♥ ☺ BATCH COUNT ♦ 200 ♥ ☺ ENABLE SCHEMA CACHE ♦ FALSE ♥ ☺ SCHEMA CACHE DIR
♦ ♥ ☺ ENABLE BCD ♦ FALSE ♥ ☺ ROWSET SIZE ♦ 20 ♥ ☺ BLOBS TO CACHE ♦ 64 ☻ ♥ DB IN
FO ☺ ♥ ☺ TYPE ♦ Microsoft Text Driver (*.txt; *.csv) ♥ ☺ PATH ♦ ☻ ☻ ♥ MS Acce
ss 97 Database ☺ ♥ DB OPEN ☺ ♥ ☺ DATABASE NAME ♦ ♥ ☺ USER NAME ♦ ♥ ☺ ODBC DS
N ♦ MS Access 97 Database ♥ ☺ OPEN MODE ♦ READ/WRITE ♥ ☺ SCHEMA CACHE SIZE ♦ 8 ♥
☺ SQLQRYMODE ♦ ♥ ☺ LANGDRIVER ♦ ♥ ☺ SQLPASSTHRU MODE ♦ SHARED AUTOCOMMIT ♥ ☺
SCHEMA CACHE TIME ♦ -1 ♥ ☺ MAX ROWS ♦ -1 ♥ ☺ BATCH COUNT ♦ 200 ♥ ☺ ENABLE SCHEMA
CACHE ♦ FALSE ♥ ☺ SCHEMA CACHE DIR ♦ ♥ ☺ ENABLE BCD ♦ FALSE ♥ ☺ ROWSET SIZE ♦
20 ♥ ☺ BLOBS TO CACHE ♦ 64 ☻ ♥ DB INFO ☺ ♥ ☺ TYPE ♦ Microsoft Access Driver (*
.mdb) ♥ ☺ PATH ♦ ☻ ☻ ♥ NewSites ☺ ♥ DB INFO ☺ ♥ ☺ TYPE ♦ STANDARD ♥ ☺ PATH
♦ C:\welcome\progs\sitesdatasetups\hoste\book ♥ ☺ ENABLE BCD ♦ FALSE ♥ ☺ DEFAULT
DRIVER ♦ PARADOX ☻ ☻ ♥ WinPOS32DB ☺ ♥ DB INFO ☺ ♥ ☺ TYPE ♦ STANDARD ♥ ☺ PAT
H ♦ C:\TaskPOS\WINPOS~1\ ♥ ☺ ENABLE BCD ♦ FALSE ♥ ☺ DEFAULT DRIVER ♦ Paradox ☻ ☻
♥ PreparationDB ☺ ♥ DB INFO ☺ ♥ ☺ TYPE ♦ STANDARD ♥ ☺ PATH ♦ C:\TaskPOS\Win
POS32DB ♥ ☺ ENABLE BCD ♦ FALSE ♥ ☺ DEFAULT DRIVER ♦ PARADOX ☻ ☻ ♥ IOLiteW21125
25165259313 ☺ ♥ DB INFO ☺ ♥ ☺ TYPE ♦ STANDARD ♥ ☺ PATH ♦ W:\Book ♥ ☺ ENAB
それは続きます...
C:\>for /f "usebackq tokens=* delims==" %a in (`type "c:\programdata\borland sha
red\bde\idapi32.cfg"`) do (echo %a)
C:\>(echo ♥SQLQRYMODE♦IOLiteW2112525165259313☻ )
♥SQLQRYMODE♦IOLiteW2112525165259313☻
上記の「TYPE」コマンドの完全な結果を変数に入れることができれば、それで作業できます(と思います)... FORの結果が異なる理由がわかりませんか?