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

[文本处理] [已解决]求助批处理查找文本问题

[复制链接]
发表于 2020-6-3 16:59:38 | 显示全部楼层 |阅读模式
本帖最后由 珠七七 于 2020-6-15 13:55 编辑

文件server.ini
文件内容:
  1. [Server]
  2. CancelHideOthersOnMove=0
  3. DefaultLine=10
  4. ip=192.168.199.22

  5. [Login]
  6. RemName=1
  7. Name=185123123
  8. RemPass=1
  9. Pass=one@123
  10. [Server]
  11. ShowTitle=1
复制代码
请教一下各位,上述文件中怎样用批处理把Name=185123123换成其他账号,如Name=185123321。
注意,先把账号显示出来,再替换成其他的账号。Name=后面有可能不是185123123。
网上的教程都是教程指定的文本替换,这种应该怎样处理呢?
望各位能指条明路。
发表于 2020-6-3 19:47:53 | 显示全部楼层
  1. PowerShell "$s=[IO.File]::ReadAllText('server.ini', [Text.Encoding]::Default) -replace '(?<=(?:Name=)")\d{9}','逗你玩';[IO.File]::WriteAllText('逗你玩.ini', $s, [Text.Encoding]::Default)"
复制代码
 楼主| 发表于 2020-6-8 11:12:18 | 显示全部楼层
回复 2# smss


    请恕我看不懂,你这个不知道怎样操作。或者能用批处理的方式实现想要的效果吗?
发表于 2020-6-8 11:33:00 | 显示全部楼层
回复 3# 珠七七

那个就是在批处理脚本,保存为a.bat,与server.ini同目录下运行即可.
 楼主| 发表于 2020-6-15 09:36:57 | 显示全部楼层
你这个PowerShell脚本可以实现,但没学过,感觉复杂看不懂。于是固执的我,坚持自己弄懂原理。
我想先实现第一步:把Name=后面的账号提取变量,用来显示当前的账号。用find查找可以的吗?
  1. find "Name=" server.ini
复制代码
结果是:
  1. RemName=1
  2. Name=185123123
复制代码
出来的结果有两条,怎样只提取后面的结果呢?
 楼主| 发表于 2020-6-15 10:42:09 | 显示全部楼层
  1. for /f "delims== tokens=2 eol=R" %%i in ('findstr "Name=" server.ini') do echo 现在的账号为:%%i
复制代码
用这个已经成功显示这个文件想要的内容,下一步就是替换成指定的账号了。这一步感觉最难,希望大神指条路子
发表于 2020-6-15 11:44:04 | 显示全部楼层
本帖最后由 went 于 2020-6-15 12:13 编辑

提示信息在标题栏,ANSI编码保存
  1. @echo off
  2. (
  3. for /f "tokens=1,2* delims=:=" %%i in ('findstr /n .* "server.ini"') do (
  4.         if "%%j"=="" (
  5.                 echo.
  6.         ) else (
  7.                 if "%%j"=="Name" (
  8.                         title 现在的账号为: %%k 请输入新的账号:
  9.                         set /p "newName="
  10.                         call echo %%j=%%newName%%
  11.                 ) else (
  12.                         if "%%k"=="" (
  13.                                 echo %%j
  14.                         ) else echo %%j=%%k
  15.                 )
  16.         )
  17. )
  18. )>"server-new.ini"
  19. move /y "server-new.ini" "server.ini" >nul 2>nul
  20. title 替换成 %newName% 完成!
  21. pause&exit
复制代码
 楼主| 发表于 2020-6-15 13:55:05 | 显示全部楼层
提示信息在标题栏,ANSI编码保存
went 发表于 2020-6-15 11:44


非常好,容易理解。感谢!
发表于 2020-6-18 11:10:14 | 显示全部楼层
回复 7# went

在多个文件夹中:
c:\201-1\SYS.INI
c:\203-1\SYS.INI
c:\205-1\SYS.INI
c:\207-1\SYS.INI
c:\208-1\SYS.INI


SYS.INI中有一行:重置时间:10

需要将一部分
c:\201-1\SYS.INI
c:\203-1\SYS.INI
c:\205-1\SYS.INI
10改为其他数字。


需要将一部分
c:\207-1\SYS.INI
c:\208-1\SYS.INI
10改为其他数字。


你的这种替换的方式我搞不来,我只能是先删除"重置时间:"‘整行,再插入重置时间:X。
主要用到红框的部分。

如果像我的这种情况,以你的方式,怎么写代码?
发表于 2020-6-18 17:52:57 | 显示全部楼层
回复 9# 滴血雄鹰
最好选几个文件夹,和你的代码打包传上来
不知道你文件内容和目的
发表于 2020-6-19 09:31:37 | 显示全部楼层
回复 10# went

代码:
链接: https://pan.baidu.com/s/1CCbF4CtLdU-i8rJkfYWrMQ 提取码: iqyx
发表于 2020-6-19 19:59:23 | 显示全部楼层
按10楼方式,只写了处理单个SYS.INI文件
看你代码里文件夹毫无规律,需要你自己添加处理
  1. @echo off
  2. set "key=重置时间"
  3. REM 指定文件
  4. set "file=C:\Users\lenovo\Desktop\代码\SYS.INI"
  5. (
  6.         title [处理文件:%file%]
  7.         for /f "tokens=1,2* delims=:" %%a in ('findstr /n .* "%file%"') do (
  8.                 if "%%b"=="" (
  9.                         echo.
  10.                 ) else (
  11.                         if "%%b"=="%key%" (
  12.                                 title [处理文件:%file%]  扫描到第%%a行,当前%key%值为:%%c,输入新值
  13.                                 set /p "newValue="
  14.                                 call echo %%b:%%newValue%%
  15.                         ) else ( echo %%b:%%c )
  16.                 )
  17.         )
  18. ) >"%file%_NEW"
  19. move /y "%file%_NEW" "%file%" >nul 2>nul
  20. title %file%处理完成
  21. pause&exit
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 00:50 , Processed in 0.020529 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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