Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用REPL.BAT的J选项_Batch File_Replace_Store_Batch Processing - Fatal编程技术网

Batch file 使用REPL.BAT的J选项

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

我正在尝试将REPL.BAT脚本与新的“J”选项一起使用,该选项允许使用JScript表达式替换参数。此脚本由@dbenham(原始REPL.BAT和最早的StackOverflow)创建。我在语法方面有点困难,希望能得到一些帮助。下面是一个场景示例

我有以下代码行:

"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+(.*)…”,即跳过空格并从包含引号的第一个非空格字符开始子表达式
哇!在这里;正如我所说,我使用了FindRepl.bat程序,但我认为这与REPL.bat中的工作方式相同:

@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”技巧。