0

嘿,我正在尝试创建一个函数来解析通过浏览器协议传递的字符串。这是一个“callto://”协议,格式如下:“callto://5551234567/”,其中包含人员电话号码。我需要提取该号码并将其传递给另一个拨打该号码的程序。该其他程序的语法如下:“CallClerk.exe dial=5551234567=”。

但是,我是批处理的初学者,不知道该怎么做。这是我当前的代码:

@echo off
set var=%1
set number=theirphone
FindStr /R "callto://(..........)/" %var% > %number%
start C:\Program Files (x86)\CallClerk\CallClerk.exe dial=%number%=
Exit /B

谢谢您的帮助!

4

3 回答 3

1
@echo off
FOR /f "tokens=2 delims=/" %%i IN ('echo %~1') DO start "" "C:\Program Files (x86)\CallClerk\CallClerk.exe" dial=%%i=
Exit /B

应该为你工作(未经测试) - 假设你的输入参数是callto://5551234567/

请注意引用的使用 -.exe需要引用,因为它在路径中包含一个空格。窗口名称中额外的一对引号。如果你愿意,你可以用"Calling %%i". 此参数是可选的,但插入它可以确保START不会混淆窗口标题、可执行文件名和参数到可执行文件。

于 2013-05-30T16:29:37.463 回答
1

这可以从字符串中提取数字。

它使用两个 for 循环,第一个收集所有非数字字符,它们在第二个 for 循环中用作分隔符以收集数字并拨打号码。

只要在所需的电话号码中使用所有数字,就可以处理可变长度的字符串。

如果您想将 + 保留为有效的电话字符,则将其包含在第一个 for 命令中的 delims 和数字中。

@echo off
set "var=callto://5551234567/"

for /f "delims=0123456789" %%a in ("%var%") do set "delims=%%a"
for /f "delims=%delims%" %%a in ("%var%") do (
start "" "C:\Program Files (x86)\CallClerk\CallClerk.exe" dial=%%a=
)
于 2013-05-31T00:51:42.647 回答
0

您应该能够使用正则表达式(?<=callto:\/\/)[\d]+(?=\/)来获取数字本身。这使用了积极的向前看和向后看,以确保您匹配至少一个前面是callto://a 和后面是 a 的数字/

如果您将其保留为类似 的callto:\/\/[\d]+\/内容,则它与整个字符串匹配,并将返回包含的callto文本。如果您打算只将数字传递给代码的下一部分,请使用前瞻提取它们以保证满足之前和之后的条件。

我使用您在示例中使用的字符串进行了快速测试。你可以在这里看到正则表达式的作用。

于 2013-05-30T16:01:30.013 回答