
标题: [文本处理] [已解决]求助批处理查找文本问题 [打印本页]
作者: 珠七七 时间: 2020-6-3 16:59 标题: [已解决]求助批处理查找文本问题
本帖最后由 珠七七 于 2020-6-15 13:55 编辑
文件server.ini
文件内容:- [Server]
- CancelHideOthersOnMove=0
- DefaultLine=10
- ip=192.168.199.22
-
- [Login]
- RemName=1
- Name=185123123
- RemPass=1
- Pass=one@123
- [Server]
- ShowTitle=1
复制代码
请教一下各位,上述文件中怎样用批处理把Name=185123123换成其他账号,如Name=185123321。
注意,先把账号显示出来,再替换成其他的账号。Name=后面有可能不是185123123。
网上的教程都是教程指定的文本替换,这种应该怎样处理呢?
望各位能指条明路。
作者: smss 时间: 2020-6-3 19:47
- 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
回复 2# smss
请恕我看不懂,你这个不知道怎样操作。或者能用批处理的方式实现想要的效果吗?
作者: flashercs 时间: 2020-6-8 11:33
回复 3# 珠七七
那个就是在批处理脚本,保存为a.bat,与server.ini同目录下运行即可.
作者: 珠七七 时间: 2020-6-15 09:36
你这个PowerShell脚本可以实现,但没学过,感觉复杂看不懂。于是固执的我,坚持自己弄懂原理。
我想先实现第一步:把Name=后面的账号提取变量,用来显示当前的账号。用find查找可以的吗?复制代码
结果是:复制代码
出来的结果有两条,怎样只提取后面的结果呢?
作者: 珠七七 时间: 2020-6-15 10:42
- for /f "delims== tokens=2 eol=R" %%i in ('findstr "Name=" server.ini') do echo 现在的账号为:%%i
复制代码
用这个已经成功显示这个文件想要的内容,下一步就是替换成指定的账号了。这一步感觉最难,希望大神指条路子
作者: went 时间: 2020-6-15 11:44
本帖最后由 went 于 2020-6-15 12:13 编辑
提示信息在标题栏,ANSI编码保存- @echo off
- (
- for /f "tokens=1,2* delims=:=" %%i in ('findstr /n .* "server.ini"') do (
- if "%%j"=="" (
- echo.
- ) else (
- if "%%j"=="Name" (
- title 现在的账号为: %%k 请输入新的账号:
- set /p "newName="
- call echo %%j=%%newName%%
- ) else (
- if "%%k"=="" (
- echo %%j
- ) else echo %%j=%%k
- )
- )
- )
- )>"server-new.ini"
- move /y "server-new.ini" "server.ini" >nul 2>nul
- title 替换成 %newName% 完成!
- pause&exit
复制代码
作者: 珠七七 时间: 2020-6-15 13:55
提示信息在标题栏,ANSI编码保存
went 发表于 2020-6-15 11:44 
非常好,容易理解。感谢!
作者: 滴血雄鹰 时间: 2020-6-18 11:10
回复 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。
主要用到红框的部分。
如果像我的这种情况,以你的方式,怎么写代码?
作者: went 时间: 2020-6-18 17:52
回复 9# 滴血雄鹰
最好选几个文件夹,和你的代码打包传上来
不知道你文件内容和目的
作者: 滴血雄鹰 时间: 2020-6-19 09:31
回复 10# went
代码:
链接: https://pan.baidu.com/s/1CCbF4CtLdU-i8rJkfYWrMQ 提取码: iqyx
作者: went 时间: 2020-6-19 19:59
按10楼方式,只写了处理单个SYS.INI文件
看你代码里文件夹毫无规律,需要你自己添加处理- @echo off
- set "key=重置时间"
- REM 指定文件
- set "file=C:\Users\lenovo\Desktop\代码\SYS.INI"
- (
- title [处理文件:%file%]
- for /f "tokens=1,2* delims=:" %%a in ('findstr /n .* "%file%"') do (
- if "%%b"=="" (
- echo.
- ) else (
- if "%%b"=="%key%" (
- title [处理文件:%file%] 扫描到第%%a行,当前%key%值为:%%c,输入新值
- set /p "newValue="
- call echo %%b:%%newValue%%
- ) else ( echo %%b:%%c )
- )
- )
- ) >"%file%_NEW"
- move /y "%file%_NEW" "%file%" >nul 2>nul
- title %file%处理完成
- pause&exit
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |