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

[文本处理] (已解决)BAT脚本如何修改指定目录下的文本文件内指定行的内容?

本帖最后由 heimahack 于 2023-1-8 13:22 编辑

我现在有个  !Setup.txt   这文件,它前面是带有感叹号的。我想修改它里面的第1001行的内空。比如我想在1001行写入   MaxLevel=255  批处理该怎么写?请教批处理高手解决。10元红包解决

没有高手在线啊?

TOP

测试代码执行注意事先备份好文件
  1. @echo off
  2. (for /f "tokens=1* delims=:" %%a in ('type "!Setup.txt" ^| findstr /n .*') do (
  3.     if %%a equ 1001 (
  4.         echo MaxLevel=255
  5.     ) else (
  6.         echo,%%b
  7.     )
  8. ))>"!Setup.bathome.net"
  9. move /y "!Setup.bathome.net" "!Setup.txt"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

你这么搞,我好喜欢你了。

TOP

回复 1# heimahack


文本内容包含大量特殊字符的情况下,可以试试这样:
  1. @echo off
  2. powershell -c "Get-Content !Setup.txt | Foreach {$n=1}{if($n++ -eq 1001){'MaxLevel=255'}else{$_}}" > !Setup.bathome.net
  3. move /y "!Setup.bathome.net" "!Setup.txt"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# Batcher


    我试用一下。貌似好复杂了

TOP

回复 6# heimahack


    5楼代码有一处笔误,我刚刚更新了,你重新测试一下吧。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# Batcher


    不行,命令报错了,
'powershell' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

TOP

回复 7# Batcher


    还是一样的,'powershell' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

TOP

本帖最后由 flashercs 于 2018-9-25 17:51 编辑

bat在开启变量延迟后好像文件名含有 ! 的的文件不能找到了,这是bug吗?
  1. @echo off
  2. set "file=!Setup.txt"
  3. set /a "cnt=1"
  4. for /f "delims=" %%a in ('"type "%file%"&&cd.>"%file%""') do (
  5.     >>"%file%",call :fn "%%a" %%cnt%%
  6.     set /a "cnt+=1"
  7. )
  8. pause
  9. exit /b
  10. :fn
  11. if %2 equ 1001 (
  12.     echo,MaxLevel=255
  13. ) else (
  14.     echo,%~1
  15. )
复制代码
bat的字符处理确实不行,若行中有特殊字符像 & | > <就出错,稳妥还是用powershell
或vbs  js

TOP

回复 9# heimahack


    什么Windows系统没有power shell ?

TOP

回复 11# flashercs


    我是WIN 2003系统

TOP

回复 12# heimahack


    2003可能没有powershell环境。。。。。
但bat不稳定,用vbs或js可行吧。

TOP

本帖最后由 heimahack 于 2018-9-25 18:05 编辑

回复 13# flashercs

用VBS可以,但我是想在D:\123\1.txt 文本内的1001行写入  CHECKGAMEGOLD > 4   这段字符

也就是D:\123\1.txt这个文件路径也得写在VBs内

TOP

本帖最后由 flashercs 于 2018-9-25 21:14 编辑

回复 14# heimahack
保存为 替换行.js 文件
  1. (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:“要替换的文件名”   注: 文件路径名用\\而不是\分割符
        行数:"要替换的文字"     可以替换多行。

TOP

返回列表