-1

我有这个记事本文件,里面装满了一长串的行......就像这样:

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

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

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 小时... :)

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

4

2 回答 2

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您可以将其重定向到输出文件的位置。

于 2013-04-24T14:50:33.420 回答
0

希望这有效。将输入和输出分别设置为到input.txt和的路径output.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%已经包含引号所以..

于 2013-04-24T09:29:12.843 回答