我的这个记事本文件中填充了很长的行列表...... 像这样:
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小时...:)
谢谢!任何帮助将不胜感激......
答案 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.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%
已包含引号所以..