Board logo

标题: [文本处理] 【已解决】批处理如何替换掉文本中指定位置的字符串? [打印本页]

作者: 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

没看出来
  1. g 7 0 4  1 2 1 7 6 4
复制代码
  1. 这里有问题,请注意
复制代码
是怎么对应的
作者: 依山居    时间: 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

  1. @set @a=0;/*&echo off & setlocal enabledelayedexpansion
  2. set /p line=<a.txt
  3. set idx=50
  4. set /p reirong=请输入要替换的字符串:
  5. if not defined reirong exit /b
  6. echo;第一行内容:%line%
  7. echo;替换字符串为:%reirong%
  8. echo;替换从第%idx%个字符开始
  9. for /f "delims=" %%i in ('cscript /nologo /e:jscript %0 "%line%" "%reirong%" "%idx%"') do (
  10. echo;替换后【%%i】
  11. )
  12. pause & exit */
  13. var initStr = WScript.Arguments(0);
  14. var rep = WScript.Arguments(1);
  15. var idx = parseInt(WScript.Arguments(2));
  16. function replaceStr(initStr, rep, idx) {
  17. return initStr.substring(0, idx) + rep + initStr.substring(idx + parseInt(rep.length))
  18. }
  19. WSH.Echo(replaceStr(initStr, rep, idx));
复制代码

作者: terse    时间: 2015-12-6 09:18

本帖最后由 terse 于 2015-12-6 09:33 编辑

少个变量
  1. @echo off
  2. set /p line=<a.txt
  3. set idx=50
  4. set /p s=请输入要替换的字符串:
  5. if not defined s exit /b
  6. setlocal enabledelayedexpansion
  7. set "str=!line:~,%idx%!!s!"
  8. set /aidx+=1
  9. for %%i in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
  10.     if "!s:~%%i!" neq "" set /a idx+=%%i&set "s=!s:~%%i!"
  11. )
  12. echo;!str!!line:~%idx%!
  13. 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行代码改为
  1. >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