使用批处理文件在中间传递一个单词

时间:2017-06-19 13:14:13

标签: batch-file

我刚刚编写了一个快速批处理文件,可以将某个目录输入上传到手机配置中,而无需用户手动手动执行。

@echo off
set /p title= Contact name? 
set /p number= Contact phone number? 
start "" http://admin:password@172.31.2.214/!mod%%20cmd%%20FLASHDIR0%%20add-item%%20104%%20(cn=%title%)(e164=%number%)(h323=%title%)

批处理文件获取变量,然后我将它们添加到start命令中。这样的脚本工作,它登录到手机界面,然后上传目录输入。

如果我输入John作为标题,输入123456作为数字,我会使用此链接http://172.31.2.214/!mod%20cmd%20FLASHDIR0%20add-item%20104%20(cn=John)(e164=123456)(h323=John)获得一个新的浏览器窗口。

批处理文件有效,用户可以使用此批处理输入目录条目。但问题是大多数标题都包含多个单词。问题是,如果我在第一个变量下输入John Smith,则链接如下所示: 管理员:!password@172.31.2.214/ MOD%20cmd%20FLASHDIR0%20add项%20104 20%(CN =约翰

第二部分(在标题变量中的空格之后)被删除。如何强制批处理文件发送带有%20而不是空格字符的URL?

2 个答案:

答案 0 :(得分:1)

在网址编码中,空格被表示为+123 456变为123+456In a URL, should spaces be encoded using %20 or +?)。所以你需要的是替换给定字符串中的空格并使用+代替。这就是你如何做到的:

@echo off
set /p title= Contact name?
set /p number= Contact phone number?
set urltitle=%title: =+%
set urlnumber=%number: =+%
start "" http://admin:password@172.31.2.214/!mod%%20cmd%%20FLASHDIR0%%20add-item%%20104%%20(cn=%urltitle%)(e164=%urlnumber%)(h323=%title%)

如果您想将空格编码为%20,请输入以下代码:

@echo off
setlocal EnableDelayedExpansion
set /p title= Contact name?
set /p number= Contact phone number?
set urltitle=!title: =%%20!
set urlnumber=!number: =%%20!
start "" http://admin:password@172.31.2.214/!mod%%20cmd%%20FLASHDIR0%%20add-item%%20104%%20(cn=%urltitle%)(e164=%urlnumber%)(h323=%title%)

答案 1 :(得分:1)

您可以使用%variable:old=new%将变量中的另一个字符串替换为字符串。这样,要用其他内容替换空格,您可以使用%variable: =somethingelse%

但是,问题是您尝试使用%20替换,其中包含%符号。这将被解释为变量名称。如果您真的想使用%20而不是+,则必须使用delayed expansion来解除百分号,如here所述:

@echo off
setlocal EnableDelayedExpansion
set /p title= Contact name?
set /p number= Contact phone number?
set urltitle=!title: =%20!
set urlnumber=!number: =%20!
setlocal DisableDelayedExpansion
start "" http://admin:password@172.31.2.214/!mod%%20cmd%%20FLASHDIR0%%20add-item%%20104%%20(cn=%urltitle%)(e164=%urlnumber%)(h323=%urltitle%)