批处理解析cccx自定义URL协议传入手机号适配3CX软电话求助
解决方案
你的问题核心是没有处理URL编码的特殊字符(%2b对应+、%20对应空格),同时原有替换逻辑存在冗余,修改后的完整批处理代码如下:
@echo off setlocal enabledelayedexpansion :: 读取传入的原始参数,自动去除外层引号 set "str=%~1" :: 第一步移除自定义协议头cccx: set "str=!str:cccx:=!" :: 处理两种格式的+号:先处理URL编码的%2b,再处理明文+,统一替换为国际号码前缀00 set "str=!str:%%2b=00!" set "str=!str:+=00!" :: 处理两种格式的空格:URL编码的%20和明文空格,统一删除,同时删除号码里的横杠 set "str=!str:%%20=!" set "str=!str: =!" set "str=!str:-=!" :: 保留原有逻辑,删除不需要的前缀0030 set "str=!str:0030=!" :: 调用软电话执行拨号 "C:\Program Files (x86)\3CXPhone\3CXPhone.exe" dial:9!str! endlocal
关键逻辑说明
- 开启
enabledelayedexpansion延迟变量扩展,避免特殊字符在批处理预处理阶段被转义,导致替换规则失效 - 批处理中要匹配参数里的%符号需要写两个%进行转义,所以
%%2b对应实际传入的%2b、%%20对应实际传入的%20 - 调整替换顺序为优先处理协议头、编码字符,再处理普通符号,避免不同替换规则互相干扰
- 移除了冗余的重复删除cccx协议头的逻辑,避免残留字符影响最终号码格式
上述代码已经覆盖你提到的两种场景:
- 传入
"%2b39+02+33919999"输出结果为00390233919999 - 传入
"+39%2002%2033919999"输出结果为00390233919999
内容的提问来源于stack exchange,提问作者Marios M.
相关产品推荐
相关产品推荐

