我正在尝试使用批处理文件来查找 .cfg 文件中的特定部分,并将其用作变量。
具体来说,我正在尝试读取 Idapi32.cfg(Borland 配置文件),以找到其中一个别名的路径。
我想不出任何方法可以巧妙地做到这一点,所以我一直在尝试这样做:
- 使用 CMD 的 TYPE 功能将 .cfg 文件作为字符串(它的一行文本)并将此字符串设置为变量
- 获取该变量的前五个字符,并使用 IF string1==string2 查看前五个字符是否是我需要的部分
- 如果不是,将变量重置为相同减去第一个字符并再次检查。
我知道我的循环有效,因为我可以看到它有效,但我不明白为什么我在运行之间得到不同的结果
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)
我希望 echo 与 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 的结果不同?