批处理脚本将文本行从一个文本板复制到另一个文本板,并执行其他操作

时间:2013-04-23 16:21:56

标签: batch-file cmd

我的这个记事本文件中填充了很长的行列表...... 像这样:

MCDXY22 = 
    (DESCRIPTION = 
       (ADDRESS = (PROTOCOL = TCP)(HOST = xyzbdk012)(PORT = 11234)
       (CONNECT_DATA = 
          (SERVER = DEDICATED)
          (SERVICE_NAME = MCDXY22)))

记事本充满了这些。每组由单个emtpy线分隔。 我要做的是将所有这些行集复制到另一个记事本文件并进行一些更改...-->

define DYLINK = MCDXY22
define DYLINK_PYS = ???
define DYLINK_XCSR = (DESCRIPTION = 
           (ADDRESS = (PROTOCOL = TCP)(HOST = xyzbdk012)(PORT = 11234)
           (CONNECT_DATA = 
              (SERVER = DEDICATED)
              (SERVICE_NAME = MCDXY22)))

这有意义吗?

这是最终产品的样子。我理解应该发生什么,伪代码和东西,但是,只是无法搞清楚。如果我手动执行此操作,则需要花费数小时n小时...:)

谢谢!任何帮助将不胜感激......

2 个答案:

答案 0 :(得分:1)

在VBScript中,这样的事情应该有效:

filename = WScript.Arguments(0)

Set fso = CreateObject("Scripting.FileSystemObject")

Set re = New RegExp
re.Pattern = "^\S"

Set f = fso.OpenTextFile(filename)

Do Until f.AtEndOfStream
  line = f.ReadLine
  If re.Test(line) Then
    WScript.StdOut.WriteLine "define DYLINK = " & line
    WScript.StdOut.WriteLine "define DYLINK_PYS = ???"
    WScript.StdOut.WriteLine "define DYLINK_XCSR = " & LTrim(f.ReadLine)
  Else
    WScript.StdOut.WriteLine line
  End If
Loop

f.Close

运行如下脚本:

cscript //NoLogo script.vbs C:\input.txt >C:\output.txt

,它将显示C:\input.txt并将修改后的文件内容打印到StdOut,您可以将其重定向到输出文件。

答案 1 :(得分:0)

希望这有效。将输入和输出分别设置为input.txtoutput.txt的路径。

@echo off
setlocal enabledelayedexpansion

set input=path to\input.txt
set output=path to\output.txt

set count=0
for /f "usebackq delims=" %%g in ("%input%") do call :process "%%g"
goto :eof

:process
set /a count+=1
set line=%1
for /f "tokens=1* delims= " %%i in (%line%) do set first=%%i&set rest=%%j
set "line=%line:~1%
if "%first:~0,1%" neq "(" set count=1&echo.>>"%output%"
if %count%==1 echo define %first%1>>"%output%"
if %count%==2 echo define DYLINK_PYS = ???>>"%output%"
if %count%==2 echo define DYLINK_XCSR = %first% %rest%1>>"%output%"
if %count% gtr 2 echo %line%1>>"%output%"

注意:

我无法找到检测换行符的方法,因此我检查了该行的第一个字符是否为(。如果不是,则会重置%count%echo换行符。如果由于某种原因在第一行之前有一个括号,则此代码将无效..

1>>是为了防止%line%末尾的任何数字搞乱附加内容。

for /f "tokens=1* delims= " %%i in (%line%)set "line=%line:~1%不是语法错误,%line%已包含引号所以..