标题: [文本处理] 【已解决】批处理如何替换掉文本中指定位置的字符串? [打印本页]
作者: zrf0123 时间: 2015-12-2 09:52 标题: 【已解决】批处理如何替换掉文本中指定位置的字符串?
如何把一个字符串,复制到a.txt,要求从a.txt的第50个字符处开始复制并覆盖
其中a.txt只有一行字符(如附档):
192.168.1.16 2015/11/23 21:34 1 2 1 7 0 4 1 f g 7 0 4 1 2 1 7 6 4 1 2 1 7 0 4 1
如果要复制内容 为 reirong=这里有问题,请注意 (这个是输入的内容,字符长度不限)
复制后a.txt内容变为:
192.168.1.16 2015/11/23 21:34 1 2 1 7 0 4 1 f 这里有问题,请注意6 4 1 2 1 7 0 4 1
咱语言水平真的很低啊,惭愧!
非常感谢大家的批评!
请热心朋友帮忙,谢谢!
作者: 回家路上 时间: 2015-12-2 16:25
没看出来复制代码
和复制代码
是怎么对应的
作者: 依山居 时间: 2015-12-2 19:21
自己学语言学正则表达式去。
作者: zrf0123 时间: 2015-12-4 23:29
回复 2# 回家路上
类似如下,主要是从第50个字节开始覆盖复制
192.168.1.16 2015/11/23 21:34 1 2 1 7 0 4 1 f g 7 0 4 1 2 1 7 6 4 1 2 1 7 0 4 1
192.168.1.16 2015/11/23 21:34 1 2 1 7 0 4 1 f这里有问题,请注意6 4 1 2 1 7 0 4 1
多谢关注!
作者: pcl_test 时间: 2015-12-5 00:01
本帖最后由 pcl_test 于 2015-12-5 01:42 编辑
回复 4# zrf0123
替换规则是什么?倒是要说清楚
1、只替换第一行的字符串?
2、从第50个字符开始替换,怎么替换?替换掉" g 7 0 4 1 2 1 7 "?
3、包括空格,“g 7 0 4 1 2 1 7 ”有17个字符,不包括空格则有8个字符,“这里有问题,请注意”有9个字符,让人如何理解?
4、样本呢?
作者: 依山居 时间: 2015-12-5 00:08
回复 5# pcl_test
还是建议版规直接强制要求上传样本文件和例子文件好了。
很多问题根本不是他们的问题难。
作者: pcl_test 时间: 2015-12-5 00:18
回复 6# 依山居
版规是早已明说了
作者: zrf0123 时间: 2015-12-5 01:26
回复 zrf0123
替换规则是什么?倒是要说清楚
1、只替换第一行的字符串?
2、从第50个字符开始替换,怎 ...
pcl_test 发表于 2015-12-5 00:01
1.只替换第一行
2.a.txt只有这一行内容,一般有150个左右的字符,需要替换的是从开始数起的第50字符以后
3.包括所有空格,"这里有问题,请注意"还可以是其它内容 ,请用一个输入变量表示 reirong=(输入内容)
4.这个样本只一行内容,见附件,注意空格也算原有内容
惊动了老大,阿
作者: 回家路上 时间: 2015-12-5 12:09
- @set @a=0;/*&echo off & setlocal enabledelayedexpansion
-
- set /p line=<a.txt
- set idx=50
- set /p reirong=请输入要替换的字符串:
- if not defined reirong exit /b
- echo;第一行内容:%line%
- echo;替换字符串为:%reirong%
- echo;替换从第%idx%个字符开始
- for /f "delims=" %%i in ('cscript /nologo /e:jscript %0 "%line%" "%reirong%" "%idx%"') do (
- echo;替换后【%%i】
- )
-
- pause & exit */
-
- var initStr = WScript.Arguments(0);
- var rep = WScript.Arguments(1);
- var idx = parseInt(WScript.Arguments(2));
-
- function replaceStr(initStr, rep, idx) {
- return initStr.substring(0, idx) + rep + initStr.substring(idx + parseInt(rep.length))
- }
- WSH.Echo(replaceStr(initStr, rep, idx));
复制代码
作者: terse 时间: 2015-12-6 09:18
本帖最后由 terse 于 2015-12-6 09:33 编辑
少个变量- @echo off
- set /p line=<a.txt
- set idx=50
- set /p s=请输入要替换的字符串:
- if not defined s exit /b
- setlocal enabledelayedexpansion
- set "str=!line:~,%idx%!!s!"
- set /aidx+=1
- for %%i in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
- if "!s:~%%i!" neq "" set /a idx+=%%i&set "s=!s:~%%i!"
- )
- echo;!str!!line:~%idx%!
- pause
复制代码
作者: zrf0123 时间: 2015-12-7 11:30
少个变量
terse 发表于 2015-12-6 09:18
变动代码后测试,会插入内容,不可,您可以再改下看看(注意空格也算字符)
@echo off
set /p line=<"E:\a.txt"
set idx=50
set /p s=请输入要替换的字符串:
if not defined s exit /b
setlocal enabledelayedexpansion
set "str=!line:~,%idx%!!s!"
set /aidx+=1
for %%i in ("E:\a.txt") do (
if "!s:~%%i!" neq "" set /a idx+=%%i&set "s=!s:~%%i!"
)
echo;!str!!line:~%idx%!>"E:\a.txt"
作者: terse 时间: 2015-12-7 14:05
本帖最后由 terse 于 2015-12-7 14:45 编辑
回复 11# zrf0123
你变动的目的是什么 没看懂
是否想替换原文件
把12行代码改为- >a.txt echo;!str!!line:~%idx%!
复制代码
作者: zrf0123 时间: 2015-12-7 23:49
回复 zrf0123
你变动的目的是什么 没看懂
是否想替换原文件
把12行代码改为
terse 发表于 2015-12-7 14:05
还是不可,要求“覆盖”后其他空格字符不变,不是插入。
a.txt内容:
192.168.1.16 2015/11/23 21:34 1 2 1 7 0 4 1 f 2 2 2 3 4 5 6 0 2 0 2 7 0 4 1 2 1 7 6 4 1 2 1 7 0 4
覆盖 test 后变为
192.168.1.16 2015/11/23 21:34 1 2 1 7 0 4 1 ftest 2 3 4 5 6 0 2 0 2 7 0 4 1 2 1 7 6 4 1 2 1 7 0 4
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |