[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 请教一个批处理特殊字符的问题

我向系统里面注册了一个协议叫做 cat , 会向 service.cmd 中传递参数.
传递的内容类似于 cat://linux&_&192.168.1.10&_&root&_&123456&_&22
其中 &_& 是分隔符.

service.cmd 中部分代码如下:
  1. for /f "delims=>$_$ tokens=1" %%i in (%1) do (set type=%%i)
  2. for /f "delims=>$_$ tokens=2" %%j in (%1) do (set ip=%%j)
  3. for /f "delims=>$_$ tokens=3" %%k in (%1) do (set username=%%k)
  4. for /f "delims=>$_$ tokens=4" %%l in (%1) do (set password=%%l)
  5. for /f "delims=>$_$ tokens=5" %%m in (%1) do (set port=%%m)
复制代码
大部分情况都蛮正常的可以用 , 但是如果密码中包含了特殊字符 , 例如 "&" 这种字符 , 就歇菜了.
Google了半天也没找到解决办法.
尝试过转义也不行.
取出来的值永远是 "&" 符号之前的字符.
还有密码中会多出一个 "/" , 很是神奇...
请教大神这是什么原因呢?有没有什么处理的办法呢?

delims=$_$ 不是以字符串 $_$ 作为分隔符,而是以字符 $ 和 _ 作为分隔符
建议换成单个字符作为分隔符

...
Batcher 发表于 2018-9-6 14:31



感谢 , 我改一下分隔符试试看.

TOP

回复 2# Batcher

管理员您好 , 不好意思又来请教您了:
这是 service.cmd 的部分代码 , 还在调试.
  1. for /f "tokens=1 delims=>_" %%i in (%1) do (set type=%%i)
  2. for /f "tokens=2 delims=>_" %%j in (%1) do (set ip=%%j)
  3. for /f "tokens=3 delims=>_" %%k in (%1) do (set username=%%k)
  4. for /f "tokens=4 delims=>_" %%l in (%1) do (set pass=%%l)
  5. for /f "tokens=5 delims=>_" %%m in (%1) do (set port=%%m)
  6. echo %1
  7. echo %type:~6,3%
  8. echo %ip%
  9. echo %username%
  10. echo %pass%
  11. echo %port:~0,-1%
  12. pause
复制代码
打印出来的结果 , 为

有几个不太明白的地方.
1. 打印 %1 的结果是带双引号的 , 应该已经是字符串类型了 , 为啥 & 还是执行了呢...
2. 密码的内容不正确 , 多了一个 "/" , 有点无法理解了...

TOP

回复 5# Batcher


万分感谢 , 明白了 , 即使是打印出来的时候也要带上双引号 .

再次感谢~

TOP

返回列表