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

[文本处理] 批处理怎么用一个文件中的字符串替换另一个文件的字符串?

a.txt文件如下(a.txt是系统生成的每天都变但形式是一样的):
lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\

b.txt 如下:
OPERATION RESTORE
OBJECTTYPE DATABASE
RESTORETYPE MOVE
DATABASE "yydb"
MOVE  "yjdb_Data"
TO  "D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\yjdbnew.mdf"
MOVE  "yjdb_Log"
TO  "D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\yjdbnew_log.ldf"
# The following image is type: Full
NBIMAGE "lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20130826123219..C"
SQLHOST "backup-YX"
NBSERVER "NBUSERVER02"

b1.txt如下:
OPERATION RESTORE
OBJECTTYPE DATABASE
RESTORETYPE MOVE
DATABASE "ywdb"
MOVE  "newksyy_Data"
TO  "D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\ywdb.mdf"
MOVE  "newksyy_Log"
TO  "D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\ywdb_log.ldf"
# The following image is type: Full
NBIMAGE "lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20130826123057..C"
SQLHOST "backup-YX"
NBSERVER "NBUSERVER02"

b2.txt如下:
OPERATION RESTORE
OBJECTTYPE DATABASE
RESTORETYPE MOVE
DATABASE "cis"
MOVE  "cis_Data"
TO  "D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\cis.MDF"
MOVE  "cis_Log"
TO  "D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\cis__Log.LDF"
# The following image is type: Full
NBIMAGE "lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131005040303..C"
SQLHOST "backup-YX"
NBSERVER "NBUSERVER02"

现在想用批处理将a.txt中的lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\这一行
(就是看这个中间含有yydb)不要最后两个字符也就是:\这两个字符不要,其它这一行复制出来粘帖出来替换b.txt中NBIMAGE后面单引号里面的内容,生成c.txt
下面的同理,将中间含有ywdb的第一行不要最后两个字符也就是:\这两个字符不要,其它这一行复制出来粘帖出来替换b1.txt中NBIMAGE后面单引号里面的内容生成c1.txt
将中间含有cis的第一行不要最后两个字符也就是:\这两个字符不要,其它这一行复制出来粘帖出来替换b2.txt中NBIMAGE后面单引号里面的内容,生成c2.txt

回复 4# zhouyao800
  1. @echo off
  2. call :substr yydb b.txt c.txt
  3. call :substr ywdb b1.txt c1.txt
  4. call :substr cis b2.txt c2.txt
  5. goto :eof
  6. :substr
  7. for /f "delims=" %%i in ('findstr "%1" a.txt') do (
  8.     set line=%%i
  9.     goto :next
  10. )
  11. :next
  12. set line=%line:~0,-2%
  13. echo %line%
  14. type %2 | sed "s/NBIMAGE.*/NBIMAGE\"%line%\"/" > %3
复制代码

TOP

回复 2# DAIC

昨晚试了一下是可以的,但今天早上系统生成的a.txt变成了这样
k2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\
再试就不行了,他自动复制替换的不是第一行的了,替换成了下面的了,大神能给帮忙看下吗?

TOP

昨晚试了一下是可以的,但今天早上系统生成的a.txt变成了这样
k2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.yydb.~.7.001of001.20131012040736..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.ywdb.~.7.001of001.20131012040537..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\
lk2.MSSQL7.LK2.db.cis.~.7.001of001.20131012040305..C:\
再试就不行了,他自动复制替换的不是第一行的了,替换成了下面的了,大神能给帮忙看下吗?

TOP

  1. @echo off
  2. call :substr yydb b.txt c.txt
  3. call :substr ywdb b1.txt c1.txt
  4. call :substr cis b2.txt c2.txt
  5. goto :eof
  6. :substr
  7. for /f "delims=" %%i in ('findstr "%1" a.txt') do (
  8.     set line=%%i
  9. )
  10. set line=%line:~0,-2%
  11. echo %line%
  12. type %2 | sed "s/NBIMAGE.*/NBIMAGE\"%line%\"/" > %3
复制代码

TOP

返回列表