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

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

本帖最后由 珠七七 于 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。
网上的教程都是教程指定的文本替换,这种应该怎样处理呢?
望各位能指条明路。
土土土土土土土土土土土

  1. PowerShell "$s=[IO.File]::ReadAllText('server.ini', [Text.Encoding]::Default) -replace '(?<=(?:Name=)")\d{9}','逗你玩';[IO.File]::WriteAllText('逗你玩.ini', $s, [Text.Encoding]::Default)"
复制代码

TOP

回复 2# smss


    请恕我看不懂,你这个不知道怎样操作。或者能用批处理的方式实现想要的效果吗?
土土土土土土土土土土土

TOP

回复 3# 珠七七

那个就是在批处理脚本,保存为a.bat,与server.ini同目录下运行即可.
微信:flashercs
QQ:49908356

TOP

你这个PowerShell脚本可以实现,但没学过,感觉复杂看不懂。于是固执的我,坚持自己弄懂原理。
我想先实现第一步:把Name=后面的账号提取变量,用来显示当前的账号。用find查找可以的吗?
  1. find "Name=" server.ini
复制代码
结果是:
  1. RemName=1
  2. Name=185123123
复制代码
出来的结果有两条,怎样只提取后面的结果呢?
土土土土土土土土土土土

TOP

  1. for /f "delims== tokens=2 eol=R" %%i in ('findstr "Name=" server.ini') do echo 现在的账号为:%%i
复制代码
用这个已经成功显示这个文件想要的内容,下一步就是替换成指定的账号了。这一步感觉最难,希望大神指条路子
土土土土土土土土土土土

TOP

本帖最后由 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
复制代码

TOP

提示信息在标题栏,ANSI编码保存
went 发表于 2020-6-15 11:44


非常好,容易理解。感谢!
土土土土土土土土土土土

TOP

回复 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。
主要用到红框的部分。

如果像我的这种情况,以你的方式,怎么写代码?

TOP

回复 9# 滴血雄鹰
最好选几个文件夹,和你的代码打包传上来
不知道你文件内容和目的

TOP

回复 10# went

代码:
链接: https://pan.baidu.com/s/1CCbF4CtLdU-i8rJkfYWrMQ 提取码: iqyx

TOP

按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
复制代码

TOP

返回列表