标题: [文本处理] 批处理如何修改指定文本文件内的指定行中的指定数值 [打印本页]
作者: natasall 时间: 2014-8-12 13:02 标题: 批处理如何修改指定文本文件内的指定行中的指定数值
本帖最后由 natasall 于 2014-8-12 15:29 编辑
批处理如何修改指定文本文件内的指定行中的指定数值
例如文本1.txt
第一行 1 aaa bbbb cccc dddd eeee ffff
我想批处理实现
提示我输入第几行
提示我选择哪一项
然后在选择的行里面替换 aaa bbbb cccc dddd eeee ffff 各项的值
作者: DAIC 时间: 2014-8-12 13:07
- sed "1s/aaa/AAA/" a.txt > b.txt
复制代码
作者: natasall 时间: 2014-8-12 13:13
回复 2# DAIC
公司不允许下载其他命令在电脑上面存放,其他命令可以实现吗
作者: natasall 时间: 2014-8-12 13:55
没人帮忙吗
作者: DAIC 时间: 2014-8-12 14:00
回复 3# natasall
XP还是Win7呢?
作者: natasall 时间: 2014-8-12 14:00
回复 5# DAIC
Windows 7
作者: natasall 时间: 2014-8-12 14:50
求帮助啊。。大哥。大神
作者: CrLf 时间: 2014-8-12 15:26
“任意一项”是指让脚本随机选一项吗?
作者: natasall 时间: 2014-8-12 15:28
回复 8# CrLf
不是随机选择一项。是我指定一项。如我指定aaaa 修改为xxxx
作者: CrLf 时间: 2014-8-12 16:31
本帖最后由 CrLf 于 2015-7-9 01:23 编辑
- @if (0==0) @end/*
- @echo off
- set /p line=行号:
- set /p oldstr=旧字符串:
- set /p newstr=新字符串:
-
- cscript -nologo -e:jscript %0 "%line:"=""%" "%oldstr:"=""%" "%newstr:"=""%"<1.txt>tmp.txt
- move /y tmp.txt 1.txt
- pause&exit
- */
-
- 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"))
复制代码
作者: natasall 时间: 2014-8-13 16:18
回复 10# CrLf
行号:2
旧字符串:好好
新字符串:嘿嘿
移动了 1 个文件。
请按任意键继续. . .
'eixt' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'*' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'var' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
系统找不到指定的路径。
作者: CrLf 时间: 2014-8-13 16:41
回复 11# natasall
exit 写成 eixt,笔误已修改,不过无关紧要,其实文件已经处理了
作者: natasall 时间: 2014-8-14 09:22
本帖最后由 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里面内容清空
作者: terse 时间: 2014-8-14 13:08
转二维后处理怎么样呢
作者: CrLf 时间: 2014-8-14 14:23
回复 13# natasall
你这是在改什么...10 楼代码就是一个完整的 bat 啊,不用拆开,要修改文件名,改红字部分就行:
...代码上文...
cscript -nologo -e:jscript %0 "%line:"=""%" "%oldstr:"=""%" "%newstr:"=""%"<1.txt>tmp.txt
move /y tmp.txt 1.txt
...代码下文...
作者: terse 时间: 2014-8-14 15:11
这样行不 (运行前请先备份文件)- @if(0)==(0) ECHO OFF
- CScript.exe //NoLogo //E:JScript "%~f0" "1.txt"
- PAUSE&GOTO :EOF
- @end
- var fso = new ActiveXObject('Scripting.Filesystemobject');
- var text = fso.OpenTextFile(WScript.Arguments(0),1);
- var arr = text.ReadAll().split(/\n/);
- text = fso.OpenTextFile(WScript.Arguments(0),2,true)
- WScript.StdOut.Write("行号:");
- var len = WScript.StdIn.ReadLine();
- WScript.StdOut.Write("旧字符串:");
- var oldstr = WScript.StdIn.ReadLine();
- WScript.StdOut.Write("新字符串:");
- var newstr = WScript.StdIn.ReadLine();
- arr[len-1] = arr[len-1].replace(new RegExp("\\b"+oldstr+"\\b",'gi'),newstr);
- text.Write(arr.join('\n'));
- text.Close()
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |