INF文件在批处理中的应用

来源:互联网 发布:apache common实现orm 编辑:程序博客网 时间:2024/05/29 06:57

**学习INF这么久,一直想做个人性化点的教程。
今天就试着写写吧~
这里出现的代码都是批处理不容易实现或者直接实现不了的~
大众化功能的代码就不贴了~**

不过我估计大家也懒得学INF了。
所以就帮大家封装成了函数块!
放在批处理末尾直接调用即可~
操作WINDOWS文件夹什么的需要管理员权限,请自行用VBS提权,代码这里就不贴了~
函数块1:刷新系统

GOTO :Eof:Refreshif 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

使用方法:
Call :Refresh
——————————————————————————————
函数块2:强力删除C盘文件
如果要搞系统文件夹的话……你懂得,需要管理猿相助
独立版地址:去看看
函数版:

GOTO :Eof:DeleteCPUSHD %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.infRunDll32.exe advpack.dll,LaunchINFSection .\temp.inf,DefaultInstallPOPD

用法:
For /F “Tokens=*” %%a in (‘Dir /b /a-d %tmp%’) do Call :DeleteC “%%~fa”

——————————————————————————————
函数块3:直接创建&修改&删除Ini条目
这个可以说是INF的众多功能中实用性最高的,设计最人性化的功能
关联贴:去看看
不废话,上函数块:

GOTO :Eof:EditIni@Echo offPushd %Tmp%(For %%a in ("[Version]""Signature=$Chicago$""[DefaultInstall]""UpdateInis=2333""[2333]") Do Echo %%~a)>.\inftmp.InfEcho "%~1","%~2",%~3 >>.\inftmp.InfRUNDLL32 SETUPAPI.DLL,InstallHinfSection ^DefaultInstall 128 .\inftmp.INFPopd

使用方法: 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读写次数和碎片数**

—————————————————————————————
实例:

 
@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:\windowsuserPath=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=
原创粉丝点击