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

[文本处理] 批处理for逐行读取文本怎么做到不删除空行?

[复制链接]
发表于 2017-3-1 08:31:27 | 显示全部楼层 |阅读模式
本帖最后由 lamcelot 于 2017-3-2 09:31 编辑

某程序有config.ini文件,想要通过批处理修改里面address=字段后面的服务器ip指向,但是不能去除空行
  1. @echo off

  2. setlocal enabledelayedexpansion

  3. set fileName=config.ini

  4. set /p ip=10.0.0.

  5. (for /f "delims=" %%i in ('type "%fileName%"') do (
  6. set "ipAddress=%%i"
  7. if "!ipAddress:address=!" neq "%%i" (
  8. echo address=10.0.0.%ip%
  9. ) else (
  10. echo,%%i
  11. )
  12. ))>%fileName%.temp
  13. move /y %fileName%.temp %fileName%


  14. pause
复制代码
修改程序的ini配置文件里面address=后面的ip地址目前已经可以实现。但是执行后会删除掉文件里面所有的空行。。。求大神指教

下面贴出关键部分的ini内容

   ;补打POS票据
gv_pos_bankinfo_bl=1



[server]
AppServer=10.0.0.34
10.0.0.34
login_appserver=10.0.0.34

[yb]
work_dir=C:\mzsf

code=02110003
dsn_name=ybdb

dsn_user=sa
dsm_passwd=123

dsn_passwd=123



还有一个问题,if默认是会区分大小写的,但是我的代码竟然会把login_appserver这行也给替换了,LZ现在很头疼正在考虑正则表达式或者findstr
发表于 2017-3-1 09:07:51 | 显示全部楼层
回复 1# lamcelot
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. set file=config.ini

  4. set "file=%file:"=%"
  5. for /f "delims=" %%b in ("%file%") do (
  6.         set lujing=%%~dpb
  7.         set name=%%~nxb
  8.         )
  9. title %lujing% %name%       
  10. echo %lujing%%name%
  11. pause

  12. set /p chazhao=输入查找内容(区分大小写)

  13. find "%chazhao%" "%file%"
  14. for /f "delims=" %%c in ('find "%chazhao%" "%file%" /c') do set jieguo=%%c
  15. set "jieguo=%jieguo:*txt: =%"
  16. echo %name%中包含“%chazhao%”的共有 %jieguo% 行。

  17. set /p tihuan=输入替换内容

  18. :check
  19. set /a num+=1
  20. if not exist "%lujing%new%num%_%name%" (
  21.         copy nul "%lujing%new%num%_%name%"
  22.         ) else (
  23.         goto check
  24.         )
  25. for /f "delims=] tokens=1*" %%i in ('find "" /v /n "%file%"') do (
  26.         set str=%%j
  27.                 if "!str!"=="" (
  28.         echo.       
  29.                         ) else (
  30.         echo;!str:%chazhao%=%tihuan%!
  31.                 )
  32.         )>>"%lujing%new%num%_%name%"
  33. echo 处理完毕&pause>nul
  34. start "" "%lujing%new%num%_%name%"       
复制代码
发表于 2017-3-1 09:22:32 | 显示全部楼层
  1. for /f "tokens=1*,delims=:" %%i in('findstr /n . "%fileName%"') do echo;%%j
复制代码
 楼主| 发表于 2017-3-1 11:01:28 | 显示全部楼层
回复 2# ygqiang 哥哥能不能在我的代码上改改啊    你这个太复杂了我不怎么看的懂
 楼主| 发表于 2017-3-1 11:01:59 | 显示全部楼层
回复 3# 回家路上

重点还是findstr /n吧?
发表于 2017-3-1 11:42:26 | 显示全部楼层
2楼代码里面,31到38行就是不删除空行进行替换。自己动手改啊。
发表于 2017-3-1 14:51:38 | 显示全部楼层
回复 4# lamcelot


    通过批处理修改里面address=字段后面的服务器ip指向

具体查找的关键字是?替换的关键字是?
 楼主| 发表于 2017-3-1 15:32:03 | 显示全部楼层
回复 7# ygqiang

格式固定是         address=...    后面的ip地址是10.0.0.? 的形式,但最后一位是不确定的,通过这个batch输入对这个ip地址的末位进行修改
发表于 2017-3-1 16:35:25 | 显示全部楼层
回复 8# lamcelot


    最后一位是不确定的??

那2楼的代码,解决不了你这个问题。
 楼主| 发表于 2017-3-1 16:57:56 | 显示全部楼层
回复 9# ygqiang

我自己写的代码可以实现功能   但是会删掉空行
发表于 2017-3-1 20:24:38 | 显示全部楼层
回复 10# lamcelot


    额。我有个需求跟你类似。

http://www.bathome.net/thread-43349-1-1.html
发表于 2017-3-1 20:41:37 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set fileName=config.ini
  4. set /p ip=10.0.0.
  5. (for /f "tokens=1*,delims=:" %%h in('findstr /n . "%fileName%"') do (
  6.     set "ipAddress=%%i"
  7.     if "!ipAddress:address=!" neq "%%i" (
  8.         echo address=10.0.0.%ip%
  9.     ) else (
  10.         echo,%%i
  11.     )
  12. ))>%fileName%.temp
  13. move /y %fileName%.temp %fileName%
  14. pause
复制代码
发表于 2017-3-1 20:58:45 | 显示全部楼层
回复 12# GNU


    经过测试,你这个代码并没有修改ini文件里面的ip地址。

比如ini文件里面有一行:address=10.0.0.8
发表于 2017-3-1 21:07:12 | 显示全部楼层
回复 13# ygqiang


你跟楼主是同一个人吗?如果不是的话,我想等等楼主本人的测试结果。也许你们的环境不一样。
我的代码没有改动楼主原来的“修改”功能,仅仅是增加了“不去除空行”功能。
发表于 2017-3-1 21:14:42 | 显示全部楼层
回复 14# GNU


    为啥用了1楼的代码,是可以修改ini文件里面的ip地址的?
你的代码,就不行。

比如ini文件里面有一行:address=10.0.0.8
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 06:49 , Processed in 0.020337 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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