PECMD能解析INF或者INI吗?
本帖最后由 求道者 于 2023-1-26 20:33 编辑不是脚本,是INI格式的配置文件。
把INI的键值读取到变量里用来判断。
Windows有api,可以用pecmd调用 ini和inf都能读,不用api,不知道你要读什么 PECMD有READ功能,可以读取的 826773297 发表于 2023-1-27 09:58
ini和inf都能读,不用api,不知道你要读什么
把ini的特定键值读取到变量里。 求道者 发表于 2023-1-27 14:02
把ini的特定键值读取到变量里。
一行命令就行,直接读
READ C:\123.INI,**,CurLine
显示出来用MESS
MESS %CurLine% 太简单,没什么技术含量 826773297 发表于 2023-1-27 15:09
一行命令就行,直接读
**是键名吗? {:1_186:}{:1_186:} 求道者 发表于 2023-1-27 16:44
**是键名吗?
不是 读所有 你自己没提供示例,谁知道你要读哪个值 826773297 发表于 2023-1-27 17:15
你自己没提供示例,谁知道你要读哪个值
; last modified 1 April 2001 by John Doe
name=John Doe
organization=Acme Products
server=192.0.2.42 ; use IP address in case network name resolution is not working
port=143
file="acme payroll.dat"
标准ini。
只能读取整个文本?
然后自己去搜索,过滤? 求道者 发表于 2023-1-27 17:30
标准ini。
只能读取整个文本?
然后自己去搜索,过滤?
比如获取ip部分直接正则就行
READ %desktop%\11111.txt,**,CurLine
SED -ni -ex a=?,server=.*? ,IP,CurLine
MESS %IP%
826773297 发表于 2023-1-27 18:38
比如获取ip部分直接正则就行
手动解析总感觉容易出问题。
算了。 本帖最后由 dos时代菜鸟 于 2023-1-27 19:25 编辑
用 批处理就可以。pecmd 更不在话下。
逐行读取,赋值,字符串切割,判断,找到目标,再赋值显示出来。
脚本区 有现成的脚本。
dos时代菜鸟 发表于 2023-1-27 19:18
用 批处理就可以。pecmd 更不在话下。
逐行读取,赋值,字符串切割,判断,找到目标,再赋值显示出来。
...
楼主是问着玩的 要读file还是port? GetPrivateProfileStringW
https://learn.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-getprivateprofilestringw
现成的API,读整个文件不科学 解析?cmd还能解析么好强大 红毛樱木 发表于 2023-1-27 23:54
GetPrivateProfileStringW
https://learn.microsoft.com/zh-cn/windows/win32/api/winbase/nf-winbase-get ...
PECMD调用的示例有吗? adminkk 发表于 2023-1-28 12:23
解析?cmd还能解析么好强大
批处理是可以读,都是家常便饭了 本帖最后由 红毛樱木 于 2023-2-3 21:56 编辑
求道者 发表于 2023-1-27 17:30
标准ini。
只能读取整个文本?
然后自己去搜索,过滤?
CALL $--ret:&&ret --qd Kernel32.dll,GetPrivateProfileIntW,$database,$port,#0xFFFFFFFF,$%&CurDir%\test.ini
这个你提供的API,好像只能整数。(UNICODE编码的INI) 本帖最后由 求道者 于 2023-2-3 23:08 编辑
红毛樱木 发表于 2023-2-3 21:45
CALL $--ret:&&ret --qd Kernel32.dll,GetPrivateProfileIntW,$database,$port,#0xFFFFFFFF,$%&CurDir%\t ...
CALL $--ret:&&ret --qd Kernel32.dll,GetPrivateProfileIntW,程序,外置工具模式,#0xFFFFFFFF,F:\FirPE\FirPE.ini
MESS %&&ret%
查询的内容也必须是整数吗?
查询中文返回4294967295
文档里说的Unicode是UTF-8带BOM吧?
求道者 发表于 2023-2-3 22:45
查询的内容也必须是整数吗?
查询中文返回4294967295
0xFFFFFFFF=4294967295
可以自己设置找不到后的返回数据。API说明里有。
UNICODE就是UNICODE,UTF-8就是UTF-8,它俩不同的呀 本帖最后由 求道者 于 2023-2-4 01:10 编辑
红毛樱木 发表于 2023-2-3 23:37
0xFFFFFFFF=4294967295
可以自己设置找不到后的返回数据。API说明里有。
UNICODE就是UNICODE,UTF-8就 ...
CALL $--ret:&&ret --qd Kernel32.dll,GetPrivateProfileIntW,程序,外置工具模式,#0xFFFFFFFF,D:\FirPE.ini
MESS %&&ret%
https://www.codeproject.com/Arti ... nicode-in-INI-files
In Notepad included with Windows, we can choose 3 encoding formats in Unicode. These are "Unicode" (UTF16-little Endian), "Unicode big Endian" (UTF16-big Endian), and "UTF-8". We can use only UTF16-little endian of these formats as an INI file format. The other encodings do not work correctly (you examine it once). Probably, the reason is that Windows NT, XP or later uses the encoding internally. This is why Windows particularly names UTF16-little Endian "Unicode".
我在Win7下面转码了INI。
获得了所谓UNICODE编码的INI。
但还是读不到。
另外:
可能在Win语境下“UNICODE就是UNICODE,UTF-8就是UTF-8,它俩不同的呀 ”
UTF-8、UTF-16、UTF-32 中的 "UTF" 是 "Unicode Transformation Format"
的缩写,意思是"Unicode 转换格式",后面的数 字表明至少使用多少个比特位来存储字符, 比如:UTF-8
最少需要8个比特位也就是一个字节来存储,对应的,UTF-16 和 UTF-32 分别需要最少 2 个字节 和 4 个字节来存储
UTF-8也是UNICODE,是其子集。
即使是在Win平台,Web世界更认可UTF-8,不存在UTF-8不是UNICODE。
况且Linux/Unix/Mac/移动平台,用UTF-8。
只有Windows因为历史原因钦定UTF16-little Endian为唯一指定UNICODE。
倒不如说Windows才是孤例。
所以我“UNICODE编码是什么鬼东西?UTF-8(我的惯性思维,毕竟我是Linux用户)?还是指UTF-16?”
准确来讲这东西是UTF-16LE 带BOM。
扯完了,回归正题。
即使我转换了正确的编码依旧无法读取。
我特意用AHK生成了标准的INI。
但还是无法读取。
附上INI。
顺带一提,Linux下的默认编码是UTF-8不带BOM。
本帖最后由 红毛樱木 于 2023-2-4 01:51 编辑
求道者 发表于 2023-2-3 22:45
查询的内容也必须是整数吗?
查询中文返回4294967295
CALL $--ret:&&ret --qd Kernel32.dll,GetPrivateProfileIntW,$程序,$外置工具模式,#0xFFFFFFFF,$%&CurDir%\FirPE.ini
MESS %&&ret%
--qd都有前导,#整数,<INT64,*PE变量名,$字符串,=原始串,>VARIANT。
---------------------------------------
PECMD内部使用的是UNICODE就是你说的UTF-16编码,所以用PECMD写代码时,尽量用这个编码。其它编码格式可能需要自己用CODE之类的转换---------------------------------------
我还是觉得用GetPrivateProfileStringW函数比较合适
本帖最后由 红毛樱木 于 2023-2-4 12:01 编辑
ENVI^ EnviMode=1
ENVI &MAX_LENGTH=512 //一般长度不会超过512吧,可以自己设置。
SET$# &plpReturnedStrings=*%&MAX_LENGTH% 0
CALL $--qd --bool --ret:&&GetPrivateProfileStringWRet Kernel32.dll,GetPrivateProfileStringW,$database,$server,$GetPrivateProfileStringWRet_Failed_PECMD2012,*&&plpReturnedStrings,#%&MAX_LENGTH%,$%&CurDir%\A.ini
SET-make &lpReturnedStrings=&&plpReturnedStrings;(%&&GetPrivateProfileStringWRet%*2)
MESS. %&&lpReturnedStrings%@%&&GetPrivateProfileStringWRet%
红毛樱木 发表于 2023-2-4 11:52
我看这个函数要操作指针就没搞了。
页:
[1]
2