标题: INF文件在批处理中的应用 [打印本页]
作者: 老刘1号 时间: 2017-4-1 12:37 标题: INF文件在批处理中的应用
本帖最后由 老刘1号 于 2017-4-2 13:01 编辑
最近更新1:13楼
最近更新2:12楼
最近更新3:5楼
——————————————————————————————————————
学习INF这么久,一直想做个人性化点的教程
今天就试着写写吧
这里出现的代码都是批处理不容易实现或者直接实现不了的
大众化功能的代码就不贴了~
不过我估计大家也懒得学INF了(如果想学的话可以进群~372057278)
所以就帮大家封装成了函数块
放在批处理末尾直接调用即可
操作WINDOWS文件夹什么的需要管理员权限,请自行用VBS提权,代码这里就不贴了~
函数块1:刷新系统- GOTO :Eof
- :Refresh
- if Not Exist %TMP%\TMP.INF ((
- Echo [Version]
- Echo Signature=$Chicago$
- Echo Provider=老刘
- Echo [DefaultInstall])>%TMP%\TMP.INF)
- RUNDLL32 SETUPAPI.DLL,InstallHinfSection ^
- DefaultInstall 128 %TMP%\TMP.INF
复制代码
使用方法:复制代码
作者: 老刘1号 时间: 2017-4-1 12:48
本帖最后由 老刘1号 于 2017-4-1 12:54 编辑
函数块2:强力删除C盘文件
如果要搞系统文件夹的话……你懂得,需要管理猿相助
独立版地址:http://www.bathome.net/thread-43545-1-1.html
函数版:- GOTO :Eof
- :DeleteC
- PUSHD %tmp%
- IF Not Exist tmmp.inf (
- >tmmp.inf (
- echo [Version]
- echo Signature=$Chicago$
- echo Provider=老刘
- echo [DefaultInstall]
- echo delfiles=a
- echo [a]))
- set "aa=%~1"
- for %%a in ("%aa%") do ^
- if exist "c:%%~pnxa" ^
- echo ..\..%%~pnxa,,,1>tmp.inf
- (type tmmp.inf&type tmp.inf)>temp.inf
- RunDll32.exe advpack.dll,LaunchINFSection .\temp.inf,DefaultInstall
- POPD
复制代码
用法:- For /F "Tokens=*" %%a in ('Dir /b /a-d %tmp%') do Call :DeleteC "%%~fa"
复制代码
作者: 老刘1号 时间: 2017-4-1 13:04
本帖最后由 老刘1号 于 2017-4-1 21:03 编辑
函数块3:直接创建&修改&删除Ini条目
这个可以说是INF的众多功能中实用性最高的,设计最人性化的功能
关联贴:http://www.bathome.net/redirect.php?goto=findpost&ptid=43575&pid=197426
不废话,上函数块:- GOTO :Eof
- :EditIni
- @Echo off
- Pushd %Tmp%
- (For %%a in (
- "[Version]"
- "Signature=$Chicago$"
- "[DefaultInstall]"
- "UpdateInis=2333"
- "[2333]"
- ) Do Echo %%~a)>.\inftmp.Inf
- Echo "%~1","%~2",%~3 >>.\inftmp.Inf
- RUNDLL32 SETUPAPI.DLL,InstallHinfSection ^
- DefaultInstall 128 .\inftmp.INF
- Popd
复制代码
作者: 老刘1号 时间: 2017-4-1 13:08
本帖最后由 老刘1号 于 2017-4-2 13:23 编辑
使用方法: Call :Editini "ini-file" "ini-section" "[old-ini-entry], [new-ini-entry], [flags]"
.
.
ini-file
包含要更改条目的 .ini 绝对路径。
ini-section
包含要更改条目的节名。
old-ini-entry
可选。常用形式为 Key=Value。
new-ini-entry
可选。常用形式为 Key=Value。关键字或值都可以指定可替代字符串。
flags
可选操作标记。可以是下列值之一:
0 默认。如果在 .inf 文件条目中有 old-ini-entry 关键字,则用 new-ini-entry 替换该条目。注意 old-ini-entry 参数关键字与 .inf 文件条目必须匹配;每个条目的值都将忽略。
要无条件地将 new-ini-entry 添加到 .ini 文件中,请将 old-ini-entry 设置为 NULL。要无条件地从 .inf 文件中删除 old-ini-entry,请将 new-ini-entry 设置为 NULL。
1 如果 .inf 文件条目中有 old-ini-entry 的关键字和值,则用 new-ini-entry 替换该条目。请注意 old-ini-entry 参数和 .inf 文件条目的关键字和值必须匹配才能进行替换。作为对比,使用操作标志值为 0,只有关键字与它匹配才能进行替换。
2 如果在 .inf 文件中不存在 old-ini-entry 参数关键字,那么在 .ini 文件中不执行任何操作。
如果在 .inf 文件条目中存在 old-ini-entry 参数关键字以及 .ini 文件条目中存在 new-ini-entry 参数关键字,则会删除与 new-ini-entry 参数关键字匹配的 .inf 文件条目,并且按以下方法操作与 old-ini-entry 参数匹配的 .inf 文件条目:用 new-ini-entry 参数关键字替换 .inf 文件条目关键字。
如果在 .inf 文件中有 old-ini-entry 参数关键字,并且在 .ini 文件中没有 new-ini-entry 参数关键字,那么将条目添加到由 new-ini-entry 参数关键字和旧值组成的 .inf 文件中。
请注意 old-ini-entry 参数和 .ini 文件条目是否匹配取决基于关键字本身,而不是关键字和值。
3 除 old-ini-entry 参数和 .inf 文件中条目是否匹配取决基于关键字和值,而不但是关键字外,其他方面与上面列出的标志参数值 2 一样。
指定关键字和值时可以使用星号 (*) 通配符,系统能正确地解释此符号。
另:多次操作文件不建议使用函数块,可以自行修改源码
一个INF处理全部文件可以提高效率并减少磁盘I/O读写次数和碎片数量。
如果无法理解函数块源码,请进群讨论:372057278
将会给出一些实例,敬请期待。
作者: 老刘1号 时间: 2017-4-1 13:22
本帖最后由 老刘1号 于 2017-4-1 23:15 编辑
实例:- @echo off
- Call :Editini "%~dp0Test.ini" Path ",SystemPath=%HOMEDRIVE%"
- %Path节中添加键值%
-
- Call :Editini "%~dp0Test.ini" Path "我是来凑数的~~~=我是随意字符串"
- %Path节中删除键值%
-
- Call :Editini "%~dp0Test.ini" Path "userPath=,userPath=%USERPROFILE%"
- %强制更改Path节中的UserPath键值%
-
- Call :Editini "%~dp0Test.ini" "Others Thing" "作者=不知道,作者=老刘~,2"
- %嘿嘿,如果“不知道”作者,将“不知道”替换为"老刘~“,否则不执行操作%
-
- Call :Editini "%~dp0Test.ini" "嘿嘿嘿" "s1="
- %清除嘿嘿嘿节的注释,前提是被包裹在项和节之间%
-
- Start %~dp0Test.ini
-
- %——————————————————————————————%
-
- GOTO :Eof
- :EditIni
- @Echo off
- Pushd %Tmp%
- (For %%a in (
- "[Version]"
- "Signature=$Chicago$"
- "[DefaultInstall]"
- "UpdateInis=2333"
- "[2333]"
- ) Do Echo %%~a)>.\inftmp.Inf
- Echo "%~1","%~2",%~3 >>.\inftmp.Inf
- RUNDLL32 SETUPAPI.DLL,InstallHinfSection ^
- DefaultInstall 128 .\inftmp.INF
- Popd
复制代码
附带Test.INI(与批处理在同一目录):- [Path]
- winPath=C:\windows
- userPath=sx
- 我是来凑数的~~~=2333
- [Others Thing]
- 作者=不知道
- [嘿嘿嘿]
- ;;‘我是注释1号~~~~~s~~~~~~~d~~~~~~~~~~~~~~~~~~s~~~~~
- ;;‘我是注释2号~~d~~~~~~~~~~~~~~~w~~~~~~~~~s~~~~~~~~~
- ;;‘我是注释3号~w~~~~~~~~~~~~~~~~~~~~~~~~~~z~~~s~~~~~
- ;;‘我是注释4号~~~~~~~~~a~~~~~~~~~~~~a~~~~~~z~~~~~~~~
- ;;‘我是注释5号~~~~~~~~~~~~~~~s~~~~~~~~~~w~~~z~~~~~~~
- ;;‘我是注释6号~~~~~~~~~~w~~~~~s~~~~~~~~~~~~~~~~~~s~~
- ;;‘我是注释7号~~~~~~x~~~~~~~~~~~~~~~~s~~~~~~~~~~~s~~
- s1=
复制代码
这算是比较人性化的实例代码了吧~
作者: pcl_test 时间: 2017-4-1 19:51
如果可以,再分享些基本日常操作的,如建立文件夹、重命名文件/文件夹、复制/移动文件/文件夹、增删改查注册表等等,形成一套比较完备的操作参考手册
作者: 老刘1号 时间: 2017-4-1 20:48
回复 6# pcl_test
嘿嘿,个人感觉没必要
批在文件上的处理能力完虐INF
INF匹配文件时甚至不能使用通配符
不过是安装文件嘛,不要求那么多了~
另,Ini修改的函数块有点小错误,已修正~
欢迎套用~
作者: happy886rr 时间: 2017-4-1 21:04
文字排版不错,很有学者的风度。
作者: 老刘1号 时间: 2017-4-1 21:20
本帖最后由 老刘1号 于 2017-4-1 22:40 编辑
回复 8# happy886rr
哈哈,见笑了
回复 6# pcl_test
嘿嘿,其实群里都有~
作者: taofan712 时间: 2017-4-2 09:10
回复 1# 老刘1号
RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters
批处理中运行这个也可以刷新。好像更简单。
作者: pcl_test 时间: 2017-4-2 10:00
回复 10# taofan712
这个适用XP,Win7及以上系统经常失效的
作者: 老刘1号 时间: 2017-4-2 12:52
本帖最后由 老刘1号 于 2017-4-2 13:20 编辑
回复 10# taofan712
嘿嘿,Xp测试成功~学习了
当时我打开词典查那个单词的时候也懵了
转自寒夜孤星斑竹的INF教程:
[Version] 节中的语句 Signature="$CHICAGO$"表明这个 .INF 文件可以用于 windows 95 以后的所有平台上,目前来说就是 win98,winme,winnt4,win2k,winxp,win2k3,win7,win8,win10。这种 .INF 文件比较多见。如果[Version]节中的签名条目是 Signature="$Windows 95$",表明这个 .INF 文件可以用于 windows 95 以后的 Win9x 平台上,如果[Version]节中的签名条目是 Signature="$WINDOWS NT$",表明这个 .INF 文件可以用于 WindowsNT 系列的平台上,包括 winnt4,win2k,winxp,win2k3等系列的操作系统的 Setup API 将会拒绝执行这种类型的 .INF 文件。
作者: 老刘1号 时间: 2017-4-2 12:58
本帖最后由 老刘1号 于 2017-4-2 13:18 编辑
INF的常用功能如下
转自寒夜孤星斑竹的INF教程:
INF 常用命令列表:
INF AddReg 命令
INF DelReg 命令
INF CopyFiles 命令
INF DelFiles 命令
INF RenFiles 命令
INF AddService 命令
INF DelService 命令
INF AddInterface 命令
INF BitReg 命令
INF LogConfig 命令
INF ProfileItems 命令
INF UpdateInis 命令
INF UpdateIniFields 命令
INF Ini2Reg 命令
作者: 1158569882 时间: 2017-4-10 00:37
路过的。学习了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |