как заменить текст без замены замененного текста - PullRequest
2 голосов
/ 29 июня 2019

Я пытаюсь заменить текст в файле несколько раз.Однако, как только я заменяю текст один раз, он заменяется снова.

Я использую файл .vbs, который заменяет текст, и файл .bat, который повторно выполняет файл .vbs.Я пытаюсь выполнить его таким образом, чтобы после замены текста он не заменялся снова.

У меня есть один файл .vbs с именем replace.vbs, полученный по этой ссылке:

Как найти и заменить текст в файле, используя среду командной строки Windows?

Const ForReading = 1    
Const ForWriting = 2

strFileName = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)
strText = objFile.ReadAll
objFile.Close

strNewText = Replace(strText, strOldText, strNewText)
Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.Write strNewText  'WriteLine adds extra CR/LF
objFile.Close

И у меня есть файл .bat, который выполняет replace.vbs несколько раз (полныйСценарий запускает replace.vbs 56 раз)

SET abcpath=C:\test\myFile.txt

cscript replace.vbs %abcpath% "Hello World" "Testing"
cscript replace.vbs %abcpath% "Testing" "Text"

PAUSE

Текст в myFile.txt - «Hello World Testing», предполагаемый вывод - «Testing Text», однако вывод - «Text Text».Как я могу выполнить второй раз, когда выполняется replace.vbs, игнорируя весь текст, который был заменен в первый раз, когда он был выполнен?

Возможно, что существует более простое решение, которое уклоняется от меня, поэтому я вернусьна шаг.Что я на самом деле пытаюсь сделать, так это взять текстовый файл, в котором есть буквы от a до g (верхний и нижний регистр), за которыми следуют до 3 апострофов или до 4 запятых (ни в коем случае не запятые и апострофы).Есть 52 комбинации, и я пытаюсь сопоставить каждую возможную комбинацию с одной буквой (52 разных буквы, потому что она чувствительна к регистру)

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

Я думаю, что первоначальный Replace () приводит к myFile.txt, содержащему: «Testing Testing»

При повторном вызове сценария он находит оба значения «Testing» и заменяет их на «Text»."

Вы должны изменить свой командный файл, как показано ниже, чтобы получить желаемый результат:

SET abcpath=C:\test\myFile.txt

cscript replace.vbs %abcpath% "Hello" "Testing"
cscript replace.vbs %abcpath% "World Testing" "Text"

PAUSE

И последовательность замены будет выглядеть примерно так:

1. Hello World Testing
2. Testing World Testing
3. Testing Text
0 голосов
/ 29 июня 2019

Не видя реальных последовательностей, которые вы пытаетесь отобразить, трудно предложить, что делать, но в общем случае сначала сопоставьте самые длинные последовательности.Кроме того, если последовательность сопоставлена ​​с чем-то, что может быть заменено другим сопоставлением, сначала временно сопоставьте ее с некоторой уникальной последовательностью, которая не будет заменена последующими сопоставлениями.Делайте это для каждого отображения.Затем, как только все сопоставления будут выполнены, замените временные уникальные последовательности теми, на которые вы хотели, чтобы они были изначально отображены.

В вашем примере вы бы отобразили «Hello World» на некоторую последовательность, которая не отображается в ваших данных., скажите «--1--», и после того, как все сопоставления будут выполнены, сопоставьте «--1--» с «Тестированием».

Вот как вы бы изменили свой скрипт replave.vbs для реализации того, чтоЯ предлагаю.

SET abcpath=C:\test\myFile.txt

cscript replace.vbs %abcpath% "Hello World" "--1--"
cscript replace.vbs %abcpath% "Testing" "--2--"

cscript replace.vbs %abcpath% "--1--" "Testing"
cscript replace.vbs %abcpath% "--2--" "Text"

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