如何替换文本而不替换替换的文本

时间:2019-06-29 18:43:22

标签: batch-file vbscript

我正在尝试重复替换文件中的文本。但是,一旦我替换了一次文本,它就会再次替换。

我正在使用替换文本的.vbs文件和重复执行.vbs文件的.bat文件。我试图以这样一种方式执行它,即在替换文本之后,不会再次替换它。

我从此链接中获得了一个名为replace.vbs的.vbs文件:

How can you find and replace text in a file using the Windows command-line environment?

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 :(得分:0)

在没有看到您要映射的实际序列的情况下,很难建议要做什么,但是通常首先映射最长的序列。同样,如果序列映射到可以被其他映射替换的对象,请先将其暂时映射到某个唯一序列,该序列将不会被后续映射替换。为每个映射执行此操作。然后,在完成所有映射后,将临时唯一序列替换为您希望它们最初映射到的序列。

在您的示例中,您将“ 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

答案 1 :(得分:-1)

我认为最初的Replace()结果会在myFile.txt中包含:“测试测试”

当您第二次调用脚本时,它将找到两个“测试”值并将其替换为“文本”。

您必须像下面那样修改批处理文件才能获得所需的输出:

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