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

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

[复制链接]
发表于 2017-3-1 22:13:37 | 显示全部楼层
请展示下ini文件中的部分内容
发表于 2017-3-2 09:05:25 | 显示全部楼层
本帖最后由 ygqiang 于 2017-3-2 09:07 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. del /q newconnection.ini
  4. echo;输入新ip,按回车 &set /p "rip="
  5. for /f "tokens=1* delims==" %%a in ('findstr "svrIP=" connection.ini' ) do set tip=%%b
  6. for /f "tokens=1* delims=:" %%i in ('findstr /n .* connection.ini') do (
  7.         set str=%%j
  8.         if "!str!"=="" (
  9.                 echo;
  10.         ) else (
  11.                 echo;!str:%tip%=%rip%!
  12.         )
  13. )>>newconnection.ini
复制代码
 楼主| 发表于 2017-3-2 09:30:45 | 显示全部楼层
本帖最后由 pcl_test 于 2017-3-2 09:39 编辑

回复 16# taofan712
顶楼已更新给出
发表于 2017-3-2 09:40:07 | 显示全部楼层
回复 18# lamcelot

18楼代码第五行处,可以考虑把行号一起获取,在替换的时候对比行号。就像userx那问题,其实我是对比着行号在处理,你可以参考下。
发表于 2017-3-2 11:06:48 | 显示全部楼层
  1. @echo off
  2. set "fileName=config.ini"
  3. for /f "tokens=1 delims=:" %%1 in ('findstr /n "^::VBS$" "%0"')do set n=%%1
  4. more "%0" +%n%>@
  5. type %filename%|cscript -nologo -e:"vbs" "@">%filename% %读取文件config%
  6. pause
  7. ::以下是你自定义代码部分


  8. ::此行以下不要修改
  9. goto :eof
  10. ::VBS
  11. set fso=createobject("scripting.filesystemobject")
  12. set regexp=new regexp
  13. s="999" '替换为999
  14. with regexp
  15.         .multiline=-1:.global=-1
  16.         .pattern="^(address=).*" '需要匹配修改的部分
  17.         wsh.echo .replace(wsh.stdin.readall,"$1"&s)
  18. end with
  19. fso.deletefile wsh.scriptfullname
复制代码
发表于 2017-3-2 13:24:23 | 显示全部楼层
  1. @echo off
  2. set /p rip=输入替换IP(如10.10.10.10)
  3. findstr /n .* connection.ini>temp.ini
  4. for /f "tokens=1* delims=:" %%a in ('findstr /b /n svrIP= connection.ini') do (
  5.         set /a tn=%%a
  6.         for /f "tokens=2 delims==" %%c in ("%%b") do set tip=%%c
  7. )
  8. setlocal enabledelayedexpansion
  9. for /f "tokens=1* delims=:" %%i in (temp.ini) do (
  10.         set /a ln=%%i
  11.         set line=%%j
  12.         if !ln! equ !tn! (
  13.         echo;!line:%tip%=%rip%!
  14.         ) else (
  15.         echo;!line!
  16.         )
  17. )>>newconnection.ini
  18. del /f /q temp.ini
复制代码
发表于 2017-3-2 23:05:23 | 显示全部楼层
回复 21# taofan712


1、获取IP和获取IP所在的行号,两个操作可以合并在同一个for命令里面完成。
2. temp.ini这个临时文件是多余的,直接在后面那个for里面用命令替换就行了。
3、最后那个for命令里面ln这个变量是多余的。
  1. @echo off
  2. set /p rip=输入替换IP(如10.10.10.10)
  3. for /f "tokens=1,3 delims=:=" %%a in ('findstr /b /n "AppServer=" 1.ini') do (
  4.     set tn=%%a
  5.     set tip=%%b
  6. )
  7. setlocal enabledelayedexpansion
  8. (for /f "tokens=1* delims=:" %%i in ('findstr /n .* 1.ini') do (
  9.     set "line=%%j"
  10.     if %%i equ !tn! (
  11.         echo;!line:%tip%=%rip%!
  12.     ) else (
  13.         echo;!line!
  14.     )
  15. ))>2.ini
复制代码

评分

参与人数 2技术 +2 收起 理由
lamcelot + 1 技术分析
taofan712 + 1 get it ,best wishes to you.

查看全部评分

发表于 2017-3-3 13:21:00 | 显示全部楼层
  1. @echo off
  2. set /p Input=输入:
  3. for /f "delims=" %%i in ('findstr /n .* 1.ini') do (
  4.         set "s=%%i"
  5.         setlocal enabledelayedexpansion
  6.         set "s=!s:*:=!"
  7.         if /i "!s:~0,10!" == "AppServer=" (
  8.                 echo;AppServer=%Input%
  9.         ) else (
  10.                 echo;!s!
  11.         )
  12.         endlocal
  13. )
  14. pause
复制代码
  1. @if (0)==(0) echo off
  2. set /p Input=输入:
  3. cscript //nologo //e:jscript "%~f0" < 1.ini "%Input%"
  4. pause & goto :EOF
  5. @end

  6. var s = WSH.StdIn.ReadAll().replace(/^(AppServer=)[^\r\n]*/gmi,'$1' + WSH.Arguments(0));
  7. WSH.Echo(s)
复制代码

  1. set "Input=1.1.1.1"
  2. gawk "BEGIN{IGNORECASE=1};{sub(/^AppServer=.*/,"AppServer=%Input%",$0);print}" 1.ini
复制代码
  1. set "Input=1.1.1.1"
  2. sed -r "s/^(AppServer=).*/\1%Input%/" 1.ini
复制代码

  1. set "Input=1.1.1.1"
  2. PowerShell -c "(type 1.ini) -replace '(?<=^AppServer=).*', '%Input%'"
复制代码

评分

参与人数 1技术 +1 收起 理由
taofan712 + 1 感谢分享,好想学sed

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 12:07 , Processed in 0.017642 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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