Пакетный или VB Script для добавления 3 строк текста в файл - PullRequest
0 голосов
/ 06 июня 2011

У меня есть процесс, который я хотел бы автоматизировать, но я не очень хорош в сценарии Bat и / или vb.Я надеюсь, что кто-то здесь может дать мне один или два указателя.

Вот ручной процесс:

  1. Открыть файл
  2. Найти этот текст: refname = "Microsoft.VSTS.Build.IntegrationBuild"
  3. Вниз на 3 строки.
  4. Добавить этот текст под текущей строкой:
  5. Сохранить файл

Если у кого-нибудь есть какие-либо предложения о том, как это сделать, я бы с удовольствием его услышал.

Ответы [ 3 ]

2 голосов
/ 06 июня 2011

Это довольно быстро и грязно, но оно работает и должно помочь вам начать.

Const ForReading = 1
Const ForWriting = 2

Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:\MyTestFile.txt", ForReading, False)

findText = "rename=""Microsoft.VSTS.Build.IntegrationBuild"""
Do
  line = f.ReadLine
  position = InStr(1, line, findText, vbTextCompare)
  output = output & line & vbCrLf
Loop While position = 0    

output = output & f.Readline & vbCrLf
output = output & f.Readline & vbCrLf
output = output & f.Readline & vbCrLf
output = output & "YOUR TEXT HERE" & vbCrLf

Do While f.AtEndOfStream <> True
  output = output & f.Readline & vbCrLf
Loop

f.Close

Set f = fso.OpenTextFile("C:\MyOutputFile.txt", ForWriting, True)
f.Write output
f.close
1 голос
/ 06 июня 2011

попробуйте это как отправную точку

    @echo off
    setlocal enabledelayedexpansion
    set /a countlin=0
    for /f "tokens=*" %%a in (a.txt) do (
      if '%%a'=='refname="Microsoft.VSTS.Build.IntegrationBuild"' (
        set /a countlin=1
      ) else (
        if /I !countlin! neq 0 (
          if /I !countlin! equ 4 (
           echo Add here whatever you want
           set /a countlin=0
          ) else ( 
              set /a countlin+=1
          )
        )
      )   
      echo %%a
    )

этот пакетный файл выполняет итерацию по всем строкам файла a.txt, когда он находит нужную строку, он начинает считать строки, а когда достигается желаемое количество строк, он повторяет желаемую строку вывода.

Дополнительное объяснение см. help for, help set и help if.

0 голосов
/ 23 июля 2013

Решение RegExp (включено в тестовый драйвер):

  Dim sNewTxt : sNewTxt    = "abracadabra" & vbCrLf
  Dim reEdit  : Set reEdit = New RegExp
  reEdit.Pattern = Join(Array( _
        "(" _
      , "[\S\s]*?" _
      , "refname=""Microsoft.VSTS.Build.IntegrationBuild""" _
      , "[\S\s]*?\r\n" _
      , "[\S\s]*?\r\n" _
      , "[\S\s]*?\r\n" _
      , "[\S\s]*?\r\n" _
      , ")" _
      , "(" _
      , "[\S\s]*?" _
      , ")" _
  ), "")
  Dim sFolder : sFolder    = "..\testdata\6254577"
  Dim oFile, s1, s2
  For Each oFile In goFS.GetFolder(sFolder).Files
      Select Case Left(oFile.Name, 1)
        Case "a"
          s1 = oFile.OpenAsTextStream().ReadAll()
          s2 = reEdit.RePlace(s1, "$1" & sNewTxt & "$2")
          goFS.CreateTextFile(goFS.BuildPath(sFolder, Replace(oFile.Name, "a", "c"))).Write s2
        Case "c"
          s1 = oFile.OpenAsTextStream().ReadAll()
          s2 = goFS.OpenTextFile(goFS.BuildPath(sFolder, Replace(oFile.Name, "c", "b"))).ReadAll()
          If s1 = s2 Then
             WScript.Echo "ok", oFile.Name
          Else
             WScript.Echo "not ok", oFile.Name
             WScript.Echo s1
             WScript.Echo "-----------"
             WScript.Echo s2
             WScript.Echo "==========="
          End If
      End Select
  Next

В нем используется тот факт, что .Replace на несовпадающем входе не меняет вход.Это делает его более надежным, чем приведенные выше решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...