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

[文本处理] 批处理如何修改指定文本文件内的指定行中的指定数值

本帖最后由 natasall 于 2014-8-12 15:29 编辑

批处理如何修改指定文本文件内的指定行中的指定数值
例如文本1.txt
第一行  1  aaa bbbb cccc  dddd  eeee  ffff

我想批处理实现
提示我输入第几行
提示我选择哪一项
然后在选择的行里面替换 aaa bbbb cccc  dddd  eeee  ffff  各项的值

这样行不 (运行前请先备份文件)
  1. @if(0)==(0) ECHO OFF
  2. CScript.exe //NoLogo //E:JScript "%~f0" "1.txt"
  3. PAUSE&GOTO :EOF
  4. @end
  5. var fso = new ActiveXObject('Scripting.Filesystemobject');
  6. var text = fso.OpenTextFile(WScript.Arguments(0),1);
  7. var arr = text.ReadAll().split(/\n/);
  8. text = fso.OpenTextFile(WScript.Arguments(0),2,true)
  9. WScript.StdOut.Write("行号:");
  10. var len = WScript.StdIn.ReadLine();
  11. WScript.StdOut.Write("旧字符串:");
  12. var oldstr = WScript.StdIn.ReadLine();
  13. WScript.StdOut.Write("新字符串:");
  14. var newstr = WScript.StdIn.ReadLine();
  15. arr[len-1] = arr[len-1].replace(new RegExp("\\b"+oldstr+"\\b",'gi'),newstr);
  16. text.Write(arr.join('\n'));
  17. text.Close()
复制代码

TOP

回复 13# natasall


    你这是在改什么...10 楼代码就是一个完整的 bat 啊,不用拆开,要修改文件名,改红字部分就行:
...代码上文...
cscript -nologo -e:jscript %0 "%line:"=""%" "%oldstr:"=""%" "%newstr:"=""%"<1.txt>tmp.txt
move /y tmp.txt 1.txt
...代码下文...

TOP

转二维后处理怎么样呢

TOP

本帖最后由 CrLf 于 2015-7-9 01:23 编辑

回复 12# CrLf


   还是没成功 。。。不知道怎么回事。。他会提示找不到2这个脚本文件
我试图把下面这段保存为名字为2的文件
*/

var line=parseInt(WScript.Arguments(0))-1
var oldstr=WScript.Arguments(1).replace(/""/g,'"')
var newstr=WScript.Arguments(2).replace(/""/g,'"')
var text = []

oldstr=oldstr.replace(/[\[\]\(\)\{\}\<\>\.\|\?\*\+\$\^]/g,'\\$&')
newstr=newstr.replace(/[0-9\$]/g,'\\$&')
text.push(WScript.StdIn.ReadAll().split(/\r?\n/g))

if(line<text.length&&line>0){
        var re = new RegExp('\\s'+oldstr+'(?= |$)','g')
        text[line]=text[line].toString().replace(re,' '+newstr)
}

WScript.Echo(text.join("\r\n"))

保存后的提示是
行号:1
旧字符串:ID
新字符串:VAR
E:\Temp\bat\2(1, 1) Microsoft JScript 编译错误: 语法错误

移动了         1 个文件。
请按任意键继续. . .
'*' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
系统找不到指定的路径。


这2种方式我都试过了。。第一种是会在1.txt里面写上无法找到脚本程序2
                                   第二种会把1.txt里面内容清空

TOP

回复 11# natasall


    exit 写成 eixt,笔误已修改,不过无关紧要,其实文件已经处理了

TOP

回复 10# CrLf


    行号:2
旧字符串:好好
新字符串:嘿嘿
移动了         1 个文件。
请按任意键继续. . .
'eixt' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'*' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
系统找不到指定的路径。

TOP

本帖最后由 CrLf 于 2015-7-9 01:23 编辑
  1. @if (0==0) @end/*
  2. @echo off
  3. set /p line=行号:
  4. set /p oldstr=旧字符串:
  5. set /p newstr=新字符串:
  6. cscript -nologo -e:jscript %0 "%line:"=""%" "%oldstr:"=""%" "%newstr:"=""%"<1.txt>tmp.txt
  7. move /y tmp.txt 1.txt
  8. pause&exit
  9. */
  10. var line=parseInt(WScript.Arguments(0))-1
  11. var oldstr=WScript.Arguments(1).replace(/""/g,'"')
  12. var newstr=WScript.Arguments(2).replace(/""/g,'"')
  13. var text = []
  14. oldstr=oldstr.replace(/[\[\]\(\)\{\}\<\>\.\|\?\*\+\$\^]/g,'\\$&')
  15. newstr=newstr.replace(/[0-9\$]/g,'\\$&')
  16. text.push(WScript.StdIn.ReadAll().split(/\r?\n/g))
  17. if(line<text.length&&line>0){
  18. var re = new RegExp('\\s'+oldstr+'(?= |$)','g')
  19. text[line]=text[line].toString().replace(re,' '+newstr)
  20. }
  21. WScript.Echo(text.join("\r\n"))
复制代码

TOP

回复 8# CrLf


    不是随机选择一项。是我指定一项。如我指定aaaa  修改为xxxx

TOP

“任意一项”是指让脚本随机选一项吗?

TOP

求帮助啊。。大哥。大神

TOP

回复 5# DAIC


    Windows 7

TOP

回复 3# natasall


    XP还是Win7呢?

TOP

没人帮忙吗

TOP

回复 2# DAIC


    公司不允许下载其他命令在电脑上面存放,其他命令可以实现吗

TOP

返回列表