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

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

[复制链接]
发表于 2018-9-24 20:51:47 | 显示全部楼层 |阅读模式
本帖最后由 heimahack 于 2023-1-8 13:22 编辑

我现在有个  !Setup.txt   这文件,它前面是带有感叹号的。我想修改它里面的第1001行的内空。比如我想在1001行写入   MaxLevel=255  批处理该怎么写?请教批处理高手解决。10元红包解决
 楼主| 发表于 2018-9-24 21:24:12 | 显示全部楼层
没有高手在线啊?
发表于 2018-9-24 22:02:45 | 显示全部楼层
测试代码执行注意事先备份好文件
  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"
复制代码
 楼主| 发表于 2018-9-24 22:11:04 | 显示全部楼层
你这么搞,我好喜欢你了。
发表于 2018-9-25 15:51:52 | 显示全部楼层
回复 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"
复制代码
 楼主| 发表于 2018-9-25 17:15:11 | 显示全部楼层
回复 5# Batcher


    我试用一下。貌似好复杂了
发表于 2018-9-25 17:17:47 | 显示全部楼层
回复 6# heimahack


    5楼代码有一处笔误,我刚刚更新了,你重新测试一下吧。
 楼主| 发表于 2018-9-25 17:24:10 | 显示全部楼层
回复 5# Batcher


    不行,命令报错了,
'powershell' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
 楼主| 发表于 2018-9-25 17:42:01 | 显示全部楼层
回复 7# Batcher


    还是一样的,'powershell' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
发表于 2018-9-25 17:45:03 | 显示全部楼层
本帖最后由 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
发表于 2018-9-25 17:48:09 | 显示全部楼层
回复 9# heimahack


    什么Windows系统没有power shell ?
 楼主| 发表于 2018-9-25 17:50:02 | 显示全部楼层
回复 11# flashercs


    我是WIN 2003系统
发表于 2018-9-25 17:53:07 | 显示全部楼层
回复 12# heimahack


    2003可能没有powershell环境。。。。。
但bat不稳定,用vbs或js可行吧。
 楼主| 发表于 2018-9-25 18:02:49 | 显示全部楼层
本帖最后由 heimahack 于 2018-9-25 18:05 编辑

回复 13# flashercs

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

也就是D:\123\1.txt这个文件路径也得写在VBs内
发表于 2018-9-25 19:14:46 | 显示全部楼层
本帖最后由 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:“要替换的文件名”   注: 文件路径名用\\而不是\分割符
        行数:"要替换的文字"     可以替换多行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 06:15 , Processed in 0.051100 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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