标题: [文本处理] (已解决)BAT脚本如何修改指定目录下的文本文件内指定行的内容? [打印本页]
作者: heimahack 时间: 2018-9-24 20:51 标题: (已解决)BAT脚本如何修改指定目录下的文本文件内指定行的内容?
本帖最后由 heimahack 于 2023-1-8 13:22 编辑
我现在有个 !Setup.txt 这文件,它前面是带有感叹号的。我想修改它里面的第1001行的内空。比如我想在1001行写入 MaxLevel=255 批处理该怎么写?请教批处理高手解决。10元红包解决
作者: heimahack 时间: 2018-9-24 21:24
没有高手在线啊?
作者: Batcher 时间: 2018-9-24 22:02
测试代码执行注意事先备份好文件- @echo off
- (for /f "tokens=1* delims=:" %%a in ('type "!Setup.txt" ^| findstr /n .*') do (
- if %%a equ 1001 (
- echo MaxLevel=255
- ) else (
- echo,%%b
- )
- ))>"!Setup.bathome.net"
- move /y "!Setup.bathome.net" "!Setup.txt"
复制代码
作者: heimahack 时间: 2018-9-24 22:11
你这么搞,我好喜欢你了。
作者: Batcher 时间: 2018-9-25 15:51
回复 1# heimahack
文本内容包含大量特殊字符的情况下,可以试试这样:- @echo off
- powershell -c "Get-Content !Setup.txt | Foreach {$n=1}{if($n++ -eq 1001){'MaxLevel=255'}else{$_}}" > !Setup.bathome.net
- move /y "!Setup.bathome.net" "!Setup.txt"
复制代码
作者: heimahack 时间: 2018-9-25 17:15
回复 5# Batcher
我试用一下。貌似好复杂了
作者: Batcher 时间: 2018-9-25 17:17
回复 6# heimahack
5楼代码有一处笔误,我刚刚更新了,你重新测试一下吧。
作者: heimahack 时间: 2018-9-25 17:24
回复 5# Batcher
不行,命令报错了,
'powershell' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
作者: heimahack 时间: 2018-9-25 17:42
回复 7# Batcher
还是一样的,'powershell' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
作者: flashercs 时间: 2018-9-25 17:45
本帖最后由 flashercs 于 2018-9-25 17:51 编辑
bat在开启变量延迟后好像文件名含有 ! 的的文件不能找到了,这是bug吗?- @echo off
- set "file=!Setup.txt"
- set /a "cnt=1"
- for /f "delims=" %%a in ('"type "%file%"&&cd.>"%file%""') do (
- >>"%file%",call :fn "%%a" %%cnt%%
- set /a "cnt+=1"
- )
- pause
- exit /b
- :fn
- if %2 equ 1001 (
- echo,MaxLevel=255
- ) else (
- echo,%~1
- )
复制代码
bat的字符处理确实不行,若行中有特殊字符像 & | > <就出错,稳妥还是用powershell
或vbs js
作者: flashercs 时间: 2018-9-25 17:48
回复 9# heimahack
什么Windows系统没有power shell ?
作者: heimahack 时间: 2018-9-25 17:50
回复 11# flashercs
我是WIN 2003系统
作者: flashercs 时间: 2018-9-25 17:53
回复 12# heimahack
2003可能没有powershell环境。。。。。
但bat不稳定,用vbs或js可行吧。
作者: heimahack 时间: 2018-9-25 18:02
本帖最后由 heimahack 于 2018-9-25 18:05 编辑
回复 13# flashercs
用VBS可以,但我是想在D:\123\1.txt 文本内的1001行写入 CHECKGAMEGOLD > 4 这段字符
也就是D:\123\1.txt这个文件路径也得写在VBs内
作者: flashercs 时间: 2018-9-25 19:14
本帖最后由 flashercs 于 2018-9-25 21:14 编辑
回复 14# heimahack
保存为 替换行.js 文件- (function(e){function t(e,t){WScript.Echo("[object Error]"===Object.prototype.toString.call(e)?[e.name,"source: "+(void 0===t?"":t),"number: "+(e.number>>>0).toString(16),"equipment: "+(e.number>>16&8191),"code: "+(65535&e.number),"Information: "+e.message].join("\n"):e)}var i,r,n,c=new ActiveXObject("Scripting.FileSystemObject"),o=/[^\r\n]*(\r\n|\n|\r)/g,l=0;new ActiveXObject("WScript.Shell").CurrentDirectory=c.GetParentFolderName(WScript.ScriptFullName),file=""+e.file;try{i=c.OpenTextFile(file,1,!1)}catch(e){return void t(e,"Opening file "+file)}r=i.ReadAll(),i.Close();try{i=c.OpenTextFile(file,2,!1)}catch(e){return void t(e,"Writing to file "+file)}for(;n=o.exec(r);)i.Write(void 0===e[++l]?n[0]:e[l]+n[1]);i.Close()})({file:"D:\\work\\1.txt",1001:"CHECKGAMEGOLD > 4",66:"MAXLEVEL=255"});
复制代码
功能:替换文本指定行
参数:file:“要替换的文件名” 注: 文件路径名用\\而不是\分割符
行数:"要替换的文字" 可以替换多行。
作者: Batcher 时间: 2018-9-25 20:25
回复 13# flashercs
先试试15楼的代码吧。如果是公司的服务器,强烈建议升级到2012以上的版本。
作者: heimahack 时间: 2018-9-25 21:54
Js能直接双击运行?
作者: heimahack 时间: 2018-9-27 17:02
回复 15# flashercs
嗯,非常有效果,谢谢你
作者: heimahack 时间: 2018-9-27 17:44
回复 15# flashercs
(function(e){function t(e,t){WScript.Echo("[object Error]"===Object.prototype.toString.call(e)?[e.name,"source: "+(void 0===t?"":t),"number: "+(e.number>>>0).toString(16),"equipment: "+(e.number>>16&8191),"code: "+(65535&e.number),"Information: "+e.message].join("\n"):e)}var i,r,n,c=new ActiveXObject("Scripting.FileSystemObject"),o=/[^\r\n]*(\r\n|\n|\r)/g,l=0;new ActiveXObject("WScript.Shell").CurrentDirectory=c.GetParentFolderName(WScript.ScriptFullName),file=""+e.file;try{i=c.OpenTextFile(file,1,!1)}catch(e){return void t(e,"Opening file "+file)}r=i.ReadAll(),i.Close();try{i=c.OpenTextFile(file,2,!1)}catch(e){return void t(e,"Writing to file "+file)}for(;n=o.exec(r);)i.Write(void 0===e[++l]?n[0]:e[l]+n[1]);i.Close()})
({file:"D:\\3.txt",1043:"CHECKGAMEGOLD > 4"});
呵呵,还是不行,会把最后面一行给删掉。算拉。不整它了。还是很感谢大家的
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |