Batch file 使用REPL.BAT的J选项
我正在尝试将REPL.BAT脚本与新的“J”选项一起使用,该选项允许使用JScript表达式替换参数。此脚本由@dbenham(原始REPL.BAT和最早的StackOverflow)创建。我在语法方面有点困难,希望能得到一些帮助。下面是一个场景示例 我有以下代码行:Batch file 使用REPL.BAT的J选项,batch-file,replace,store,batch-processing,Batch File,Replace,Store,Batch Processing,我正在尝试将REPL.BAT脚本与新的“J”选项一起使用,该选项允许使用JScript表达式替换参数。此脚本由@dbenham(原始REPL.BAT和最早的StackOverflow)创建。我在语法方面有点困难,希望能得到一些帮助。下面是一个场景示例 我有以下代码行: "Port #" == driver.find_element_by_id("portno").text: break 我想用以下代码替换上面的代码行: expected_conditions.text_to_be_presen
"Port #" == driver.find_element_by_id("portno").text: break
我想用以下代码替换上面的代码行:
expected_conditions.text_to_be_present_in_element((By.ID, 'portno'), "Port #")
如您所见,原始代码行有一个小写的“id”,而我想用它替换的代码有一个大写的“id”。我尝试使用以下方法替换该行:
type %iFile% |
repl "\b(.*?) \=\= driver\.find_element_by_(.*?)\(\q(.*?)\q\)\.text\: break"
"expected_conditions.text_to_be_present_in_element((By.$2.toUpperCase(), '$3'), $1)"
JMX >filenameNEW.py
无论何时尝试此操作,都会收到“JScript运行时错误:无效字符”错误。我试着改变
$2.toUpperCase()
…到
$[2].toUpperCase()
…但收到的错误与我在最后一句中所说的相同。有人能帮我找出我做错了什么吗?提前谢谢 你的问题有几个细节;首先是最简单的:
- 你没有包括J选项李>
- 当您不使用J选项时,替换字符串是一个文本,它只会更改$1、$2、,。。。价值观例如:“此值:$1”。使用J选项时,替换字符串是一个JScript表达式,必须以正确的方式进行组装;例如:“'This value:'+$1”,即替换字符串是文本“This value:”与值$1(子匹配子字符串)连接(+)。这样,您必须将完整的替换字符串重写为JScript表达式
- 在表达式中,可以使用撇号括住文字字符串,不能使用引号,因为它们终止REPL.BAT的参数。起初,我认为撇号可以通过其\x27十六进制代码作为特殊字符包含,但由于奇怪的原因,它不起作用,因此我必须通过fromCharCode()函数“伪装”撇号注意:我在测试中使用了FindRepl.bat程序,所以我不知道dbenham的REPL.bat在这一点上是否有相同的行为
- 在regexp的第一部分中:\b(…\b表示“单词的开头”,但单词是从第一个字母开始的,因此引号保留在子表达式之外!我将这部分更改为“\s+(.*)…”,即跳过空格并从包含引号的第一个非空格字符开始子表达式
@echo off
set line= "Port #" == driver.find_element_by_id("portno").text: break
echo Input:
echo %line%
echo Wanted:
echo expected_conditions.text_to_be_present_in_element((By.ID, 'portno'), "Port #")
echo/
echo %line%| "FindRepl Modified.bat" "\s+(.*) \=\= driver\.find_element_by_(.*?)\(\q(.*?)\q\)\.text\: break"
"Apos=String.fromCharCode(39),'expected_conditions.text_to_be_present_in_element((By.'+$2.toUpperCase()+', '+Apos+$3+Apos+'), '+$1+')'" /J /Q:q
输出:
expected_conditions.text_to_be_present_in_element((By.ID, 'portno'), "Port #")
您可以尝试删除Apos变量,并使用\x27在撇号中包含的文字字符串中插入撇号。如果您发布此更改的结果,我将不胜感激…感谢您的回复@Aacini。是的,我确实忘记了包含我的选项,这对确定正确语法非常重要;我很抱歉!您将看到除此之外,我正在尝试使用'J'选项以及'm'和'X'选项。我相信这就是我遇到困难的原因。'm'选项允许我一次对多行执行REPL,而'X'选项允许在替换字符串中进行扩展替换。如果我去掉.toUpperCase()部分以及“J”选项,代码运行良好,除了“id”将是小写而不是大写。另外,看看@dbenham的示例,他在示例中似乎没有使用+$1。熟睡在这个问题上并返回它对我有一些好处。我现在理解了你的解释。我创建了一个小脚本,在sm上重现这个问题all scale first&能够让它正常工作。我相信我现在可以在更大的范围内尝试。感谢您的时间和帮助@Aacini!撇号可以通过REPL.BAT程序中的
\x27
直接包含在JScript表达式中吗?或者它还需要“Apos”技巧…抱歉,忘了回复您,@Aacini.Yes,\x27在REPL.BAT(版本6.2)中运行良好,并生成所需的撇号。当然,双引号不起作用,因此需要使用“Apos”技巧。