Board logo

标题: [文件操作] 批处理如何读取文本的一个字符串,写到另外一个文本中? [打印本页]

作者: weww000    时间: 2012-11-21 00:57     标题: 批处理如何读取文本的一个字符串,写到另外一个文本中?

你好。大大,请教个批处理问题。用CMD命令怎么实现?

1.txt 内容为

<Target>443A5C73797374656D736574CEC4BCFEB4E6B7C55C;1</Target>
2.TXT

<Target>AAAAAAAAAAAAAAAAAAAAAAAAA</Target>

1.TXT 中 <Target> </Target> 中间的字母是会变得,我想获取出这个字符串写到 2.txt 的<Target> </Target> 中间。。

求解。。。
作者: andyrave    时间: 2012-11-21 01:36

两个文本 <Target> </Target> 都只有一行的话  比较好写 最好把1和2的范本发上来看看
作者: weww000    时间: 2012-11-21 02:16

1.
<History>
                <Target>443A5C73797374656D736574CEC4BCFEB4E6B7C55C;1</Target>
                <NormalReplaceMemo1>31302E312E3235342E32</NormalReplaceMemo1>
                <NormalReplaceMemo2>A3A8C9BEB3FDB4CBB4A6A3A9C8BBBAF3CAE4C8EBC4E3B5C4B7FECEF1C6F7B5D8D6B7A3ACB5E3BBF7D3D2CFC2BDC7B5C4BFAACABC</NormalReplaceMemo2>
                <CharacterReplaceMemo1></CharacterReplaceMemo1>

2.

<History>
                <Target>443A5C73797374656D736574CEC4BCFEB4E6B7C55C;1</Target>
                <NormalReplaceMemo1>31302E31A3A8C9BEB3FD2E32</NormalReplaceMemo1>
                <NormalReplaceMemo2>A3A8C9BEB3FDB4CBB4A6A3A9C8BBBAF3CAE4C8EBC4E3B5C4B7FECEF1C6F7B5D8D6B7A3ACB5E3BBF7D3D2CFC2BDC7B5C4BFAACABC</NormalReplaceMemo2>
                <CharacterReplaceMemo1></CharacterReplaceMemo1>

问题不在这里  在于 1.txt里的东西会变
作者: weww000    时间: 2012-11-21 02:19

1.txt里面是个加密过的东西。不知道什么加密、!!!她会变得,我想运行把调出来,写到2.txt里面。
就是
1。里面 <Target>1111</Target>
写到
2.<NormalReplaceMemo2>1111</NormalReplaceMemo2>

1111 只是示意。。。是会变得需要读出来。
作者: tmplinshi    时间: 2012-11-21 02:28

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('findstr "<Target>.*</Target>" 1.txt') do (
  4.     set Target=%%a
  5. )
  6. for /f %%n in (' find /c /v "" ^< 2.txt ') do (
  7.     for /l %%a in (1 1 %%n) do (
  8.         set str=
  9.         set /p str=
  10.         if not defined str (
  11.             echo,
  12.         ) else if "!str:</Target>=!" neq "!str!" (
  13.             echo !Target!
  14.         ) else (
  15.             echo,!str!
  16.         )
  17.     )
  18. ) <2.txt >2.new
  19. move 2.new 2.txt
  20. pause
复制代码

作者: tmplinshi    时间: 2012-11-21 02:34

本帖最后由 tmplinshi 于 2012-11-21 02:38 编辑

sed 下载地址: http://bathome.net/thread-15605-1-4.html
  1. @echo off
  2. set sed=sed -n "s|^.*\(<Target>.*</Target>\).*$|\1|ip" 1.txt
  3. for /f "delims=" %%a in ('%sed%') do set t1=%%a
  4. sed -i "s|<Target>.*</Target>|%t1%|i" 2.txt
  5. pause
复制代码

作者: weww000    时间: 2012-11-21 18:39

本帖最后由 tmplinshi 于 2012-11-21 18:46 编辑

多谢老大。。。都试过了,可以。
如果只替换2.txt中 <Target>adsdasdsadsadsa</Target>  的前两位,后面的保留呢?
作者: tmplinshi    时间: 2012-11-21 18:46

本帖最后由 tmplinshi 于 2012-11-21 18:57 编辑
多谢老大。。。都试过了,可以。
如果只替换2.txt中 adsdasdsadsadsa  的前两位,后面的保留呢?
weww000 发表于 2012-11-21 18:39



    是否是这个意思?

1.txt
<Target>123456</Target>


2.txt
<Target>abcdefg</Target>


结果为:
2.txt
<Target>123456cdefg</Target>


如果是这个意思的话,代码如下:
  1. @echo off
  2. set sed=sed -n "s|^.*<Target>\(.*\)</Target>.*$|\1|ip" 1.txt
  3. for /f "delims=" %%a in ('%sed%') do set t1=%%a
  4. sed -i -r "s|(<Target>)..(.*</Target>)|\1%t1%\2|i" 2.txt
复制代码

作者: weww000    时间: 2012-11-21 19:18

控制字符截取2的是哪一个?2个字符?4个字符?
作者: weww000    时间: 2012-11-21 19:19

看明白了。。。是..   ....
作者: weww000    时间: 2012-11-21 19:51

创建多个快捷方式为什么只有第一个有效?其他的无效
作者: tmplinshi    时间: 2012-11-21 23:30

本帖最后由 tmplinshi 于 2012-11-21 23:31 编辑
创建多个快捷方式为什么只有第一个有效?其他的无效
weww000 发表于 2012-11-21 19:51



    请另外发一个帖子,因为这个问题与这个帖子没有关联。

    另外,你需要把代码贴出来,别人才能分析是什么原因。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2