找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 80863|回复: 21

[文件操作] 批处理如何实现修改.h文件中的指定行内容?

[复制链接]
发表于 2016-4-26 16:32:50 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-4-26 19:46 编辑

有config.h文件,其中有几句话如下:
/************SERVICE SS configuration************/

//#define RADIO_IP31 /* IP31 radio */
#define RADIO_SK81 /* SK81 radio */


#define RADIO_LAM /* LAM radio */
#define RADIO_SUPPORT_OV_DTC /* radio support OV DTC*/
#define RADIO_LAM_2DIN /* LAM radio */


想写脚本先判断如下两句
//#define RADIO_IP31 /* IP31 radio */
#define RADIO_SK81 /* SK81 radio */
如果是屏蔽了第一句,使用第二句,就改为:
#define RADIO_IP31 /* IP31 radio */
//#define RADIO_SK81 /* SK81 radio */
使用第一句,屏蔽第二句。

请教大家,谢谢!
发表于 2016-4-26 17:33:05 | 显示全部楼层
本帖最后由 Nsqs 于 2016-4-28 01:05 编辑
  1. dim fso,Wsc,WshPath,s(1),check(1)
  2. set fso=CreateObject("scripting.filesystemobject")
  3. Set Wsc=CreateObject("wscript.shell")
  4. WshPath=Fso.getparentfoldername(wsh.scriptfullname):Wsc.CurrentDirectory = WshPath
  5. file="2.txt"
  6. if not fso.fileexists(file) then wsh.quit
  7. sample="new_"&file
  8. if not fso.fileexists(sample) then fso.copyfile file,sample
  9. result=fso.opentextfile(sample).readall
  10. '正在处理,可能需要点时间...
  11. t=timer
  12. s(0)="//#define RADIO_IP31 /* IP31 radio */":s(1)="//#define RADIO_SK81 /* SK81 radio */"
  13. check(0)=instr(result,s(0))>0:check(1)=instr(result,s(1))>0
  14. if check(0)=-1  then _
  15.         result=Replace(result,s(0),right(s(0),len(s(0))-2)):_
  16.         result=Replace(result,right(s(1),len(s(1))-2),s(1)):_
  17.         write
  18. if check(1)=-1 then _
  19.         result=Replace(result,right(s(0),len(s(0))-2),s(0)):_
  20.         result=Replace(result,s(1),right(s(1),len(s(1))-2)):_
  21.         write
  22. sub write
  23.         fso.createtextfile(sample).write result
  24.         set fso=nothing
  25.         msgbox Round(timer-t,2) & "秒完成!",64
  26.         wsh.quit
  27. end sub
复制代码
保存vbs代码
发表于 2016-4-26 20:21:02 | 显示全部楼层
回复 1# swang21
  1. @echo off&(color 0e&chcp 936&setlocal enabledelayedexpansion)2>nul
  2. for /f "delims=" %%i in ('type "%~f1"')do (
  3. if /i "%%i"=="//#define RADIO_IP31 /* IP31 radio */" (set "if_one=1"
  4. )else if /i "%%i"=="#define RADIO_SK81 /* SK81 radio */" (set "if_two=1"
  5. )
  6. )
  7. echo,%if_one%%if_two%
  8. if /i "%if_one%%if_two%"=="11" (cd.>"%~f1.%~x1")
  9. if /i "%if_one%%if_two%"=="11" (
  10. for /f "delims=" %%i in ('type "%~f1"')do (
  11.   if /i "%%i"=="//#define RADIO_IP31 /* IP31 radio */" (
  12.    rem:
  13.   )else if /i "%%i"=="#define RADIO_SK81 /* SK81 radio */" (
  14.    (echo,%%i)>>"%~f1.%~x1"
  15.   )else (
  16.    (echo,%%i)>>"%~f1.%~x1"
  17.   )
  18. )
  19. )
  20. pause
复制代码
发表于 2016-4-26 22:52:48 | 显示全部楼层
太讽刺了。
 楼主| 发表于 2016-4-27 14:59:22 | 显示全部楼层
回复 3# /zhqsystem/zhq
谢谢你的指教,还有点问题请教你一下:
1. %~f1.%~x1 这是什么意思啊?
2. 脚本应该首先读config.h文件,再找到那两行进行后续的修改吧?
 楼主| 发表于 2016-4-27 15:01:09 | 显示全部楼层
回复 4# codegay
敢问为什么讽刺吗?
这个帖子的问题太简单?
 楼主| 发表于 2016-4-27 15:04:56 | 显示全部楼层
回复 2# Nsqs
谢谢你的指教,您的代码我没看太明白,是不是大致意思是:遍历文件发现“//”就改掉,如果是这个思路有可能不太行,因为config.h文件中有多处以“//”开头的语句。
发表于 2016-4-27 15:42:07 | 显示全部楼层
回复 7# swang21


    可能我没看懂你的问题,思路是遇到//后就切换上下行文本,只处理第一次遇到的//
发表于 2016-4-27 15:48:39 | 显示全部楼层
本帖最后由 happy886rr 于 2016-4-27 15:51 编辑

回复 7# swang21
第三方fr地址
  1. @echo off
  2. fr  config.h -r:"^ *// *#define RADIO_IP31 /\* IP31 radio \*/" -t:"#define RADIO_IP31 /\* IP31 radio \*/"
  3. fr  config.h -r:"^ *#define RADIO_SK81 /\* SK81 radio \*/" -t:"//#define RADIO_SK81 /* SK81 radio */"
  4. set/p=完成
复制代码

评分

参与人数 1技术 +1 收起 理由
swang21 + 1 解决问题

查看全部评分

发表于 2016-4-27 15:49:18 | 显示全部楼层
回复 7# swang21


你能看懂别人代码的逻辑,也能知道处理的逻辑流程。对你来说显然是简单的。
 楼主| 发表于 2016-4-27 16:34:07 | 显示全部楼层
回复 9# happy886rr
经过测试,是可以使用的,但是为什么执行的这么慢呢,得1分钟。
 楼主| 发表于 2016-4-27 16:35:55 | 显示全部楼层
回复 8# Nsqs
那我再按照你的思路理解一下,有问题再请教你。
发表于 2016-4-27 16:45:26 | 显示全部楼层
本帖最后由 happy886rr 于 2016-4-27 16:52 编辑

回复 11# swang21
替换200万行也不需要3秒,这是白杨的fr,不会慢的,除非你的系统缺少了必要的dll支持,我这都测试了20万行的头文件,替换0.3秒左右。由于论坛空间有限,截图就不上了,我又测试了替换500万行,也才8秒。毕竟是C语言只比汇编语言慢20%,但是却比任何其他高级语言都快,除非你用凌动系列cpu。
 楼主| 发表于 2016-4-27 17:15:14 | 显示全部楼层
回复 13# happy886rr
那怎么回事呢,我的头文件也就几百行,有可能怪我的电脑吧。
fr.exe直接放在和脚本同一路径就行了吧,不需要设置环境变量吧?
发表于 2016-4-27 18:05:44 | 显示全部楼层
回复 14# swang21
如果是最新win10系统,可能会出现不兼容。你啥系统?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 21:25 , Processed in 0.022435 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表