Batch:如何存储正则表达式搜索过程中遇到的值&替换(Repl.bat)

人气:569 发布:2022-10-16 标签: replace batch-file batch-processing store

问题描述

使用Batch,我正在寻找一种方法来(1)搜索正则表达式模式和(2)在该模式中存储变量...这样我就可以在进行搜索和替换时使用这些变量。

我一直在使用@dbenham(original REPL.BAT post和earliest StackOverflow post)创建的REPL.BAT。以下是该方案的一个示例。

我在文档中搜索以下代码的出现:

driver.find_element_by_id("username").send_keys("rwbyrd")
driver.find_element_by_id("password").send_keys("password")

并替换为...

login("rwbyrd","password")

使用以下批处理代码:

type %filename% | repl "sdriver.find_element_by_id(x22usernamex22).send_keys(x22rwbyrdx22)s*driver.find_element_by_id(x22passwordx22).send_keys(x22passwordx22)"       "login(x22rwbyrdx22,x22passwordx22)" MX >%filename%.new

注意:x22=表示双引号的十六进制

我正在寻找一种方法来存储我要搜索的代码中的[Username]‘rwbyrd’和[Password]‘Password’值,并在进行替换时使用这些值。我希望在REPL.BAT命令中找到一种方法来实现这一点,但我将采用我能得到的:)。有人知道如何做到这一点吗?提前感谢!

推荐答案

如果您尚未执行此操作,强烈建议您从命令提示符执行以下命令:

获取特定于REPL.BAT的帮助:

repl /?

获取有关REPL.BAT使用的JScript正则表达式的帮助(在Web浏览器中打开Microsoft文档)

repl /?regex

获取有关替换子匹配功能的帮助-您要查找的"变量"(在Web浏览器中打开Microsoft文档)

repl /?replace

我在您的搜索正则表达式中将前导s替换为(单词边界)。我还使用未转义的圆括号来捕获用户名和密码值,以便在替换字符串中使用它们。.*?匹配括号文字中的内容(非贪婪匹配)。一项表面上的更改是使用q而不是x22

type %filename% | repl "driver.find_element_by_id(qusernameq).send_keys((.*?))s*driver.find_element_by_id(qpasswordq).send_keys((.*?))" "login($1,$2)" MX >%filename%.new

更新

根据OP的评论和Aacini的回答,我已更新REPL.BAT以接受J选项,以将替换值指定为JScript表达式。

以下示例将用户名转换为大写:

type %filename% | repl "driver.find_element_by_id(qusernameq).send_keys((.*?))s*driver.find_element_by_id(qpasswordq).send_keys((.*?))" "'login('+$[1].toUpperCase()+','+$[2]+')'" MXJ >%filename%.new

有关详细信息和示例,请参阅http://www.dostips.com/forum/viewtopic.php?p=37855#p37855。

665