[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
以下代码会修改INTL.INF,先备份INTL.INF文件。。。
  1. @echo off
  2. (for /f "delims=" %%i in ('findstr /iv "simsun.ttc,,,65536" INTL.INF') do (
  3.    set "str=%%i"
  4.    setlocal enabledelayedexpansion
  5.    set str=!str:e00e0804=e0860804!
  6.    set str=!str:pintlgnt.ime=sun86.ime!
  7.    set num=!str:pintlgnt=!
  8.    if "!num!"=="!str!" echo;!str!
  9.    if /i "!str!"=="[sourcedisksfiles]" (
  10.       echo Sun86.IME    = 107,,,,,,,0,0
  11.       echo Sun86.mb     = 107,,,,,,,0,0
  12.       echo Sun86.chm    = 107,,,,,,,0,0
  13.    )
  14.    endlocal
  15. ))>tem
  16. move tem INTL.INF
  17. start "" "INTL.INF"
复制代码
1

评分人数

    • stance: 实在是高!甚为体贴。技术 + 1
技术问题请到论坛发帖求助!

TOP

把内容加到第一个[sourcedisksfiles]后面
:
  1. @echo off
  2. (for /f "delims=" %%i in ('findstr /iv "simsun.ttc,,,65536" INTL.INF') do (
  3.    set "str=%%i"
  4.    if /i "%%i"=="[sourcedisksfiles]" set /a flag+=1
  5.    setlocal enabledelayedexpansion
  6.    set str=!str:e00e0804=e0860804!
  7.    set str=!str:pintlgnt.ime=sun86.ime!
  8.    set num=!str:pintlgnt=!
  9.    if "!num!"=="!str!" echo;!str!
  10.    if !flag! equ 1 (
  11.       echo Sun86.IME    = 107,,,,,,,0,0
  12.       echo Sun86.mb     = 107,,,,,,,0,0
  13.       echo Sun86.chm    = 107,,,,,,,0,0
  14.    )
  15.    endlocal
  16. ))>tem
  17. move tem INTL.INF
  18. start "" "INTL.INF"
复制代码
技术问题请到论坛发帖求助!

TOP

11楼代码确实会导致在[sourcedisksfiles]之后,下一个[sourcedisksfiles]之前的每一行都插入内容,代码未测试,大意了 ^_^

还真没主意,是要加在[sourcedisksfiles]段的最后面,一直以为是加在它下面呢
如果要加在[sourcedisksfiles]段的最后,则必须知道它的下一个段名,应该很容易解决
技术问题请到论坛发帖求助!

TOP

为了能处理文本中的半角!号,还真费了翻功夫。。。
  1. @echo off
  2. set wjm=a.txt
  3. (for /f "delims=" %%i in ('findstr /ivn "simsun.ttc,,,65536" %wjm%') do (
  4.    set "str=%%i"
  5.    if defined h set "h="
  6.    if not defined v (
  7.       for /f "tokens=1* delims=:" %%j in ("%%i") do (
  8.          if /i "%%k"=="[sourcedisksfiles]" set s=1
  9.          if defined s if /i "%%k"=="[Locales]" set h=a&set v=a&set "s="
  10.        )
  11.     )
  12.    setlocal enabledelayedexpansion
  13.    set str=!str:*:=!
  14.    if not defined str (echo;) else (
  15.       set str=!str:e00e0804=e0860804!
  16.       set str=!str:pintlgnt.ime=sun86.ime!
  17.       set num=!str:pintlgnt=!
  18.       if defined h (
  19.          echo Sun86.IME    = 107,,,,,,,0,0
  20.          echo Sun86.mb     = 107,,,,,,,0,0
  21.          echo Sun86.chm    = 107,,,,,,,0,0
  22.        )
  23.       if "!num!"=="!str!" echo;!str!
  24.    )
  25.    endlocal
  26. ))>tem
  27. move tem "%wjm%"
  28. start "" "%wjm%"
复制代码

[ 本帖最后由 随风 于 2011-1-10 16:04 编辑 ]
1

评分人数

技术问题请到论坛发帖求助!

TOP

也说说我的代码,得到代码后能认真研读的好像真不是很多,赞一个先 ^_^
先说说代码功能:
由于不懂inf文件的特性,所以是把它当作任意文本来处理的,所以就必须考虑某些特殊情况
比如:
1、文本内容含半角!符号
2、[sourcedisksfiles]和[Locales]段名有可能出现在文本的任意位置,且不一定是成对出现。

if defined v 是判断变量名为v的是否被定义过,自然 if not defined 则是判断v是否没被定义过
所以 set h=a&set v=a 只是为了给这两个变量定义,值是什么不重要,重要的是这两个变量被定义了,也就是这两个变量存在,而set "v="则是清空变量v的值,也就是变量v不存在了。
for 循环到[sourcedisksfiles]行时,变量 s 被定义,这相当一个开关,告诉代码在这之后若遇到[Locales]则插入新内容,也就是执行if defined h 里的命令,也就是在此后遇到[Locales]时需给变量h定义,if defined h 里的命令才会执行。
if defined s if /i "%%k"=="[Locales]" set h=a&set v=a&set "s="
当变量s被定义,也就是已经找到[sourcedisksfiles]后,若该行为[Locales]则set h=a&set v=a&set "s="定义h的作用前面已经说了,那定义 v和清空s呢?
定义v是为了配合if not defined v 这句,否则在下次遇到这两个段名时,又会重复执行。清空变量s,这句好像多余了,应该可以不要,因为定义了变量v,里面的代码就不会在执行了。
技术问题请到论坛发帖求助!

TOP

返回列表