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

[文本处理] [已解决]批处理如何去除变量中指定字符及其后的所有字符?

批处理如何去除变量中指定字符及其后的所有字符?
比如说,我有以下代码段,得到了本机的外网IP,现在得到的IP字符串赋值给变量ip,但ip的最终内容是“IP地址,规属地”,我只想保留IP地址,要把逗号“,”和它后面的归属地去掉,而且因为要考虑通用性,不同地区的地名是不一样长的,所以不能用字符截取方式。
求助!!
  1. ::获取本机外网IP、归属地并发送提醒!------------------------------------------------------------------
  2. ::预设变量值,探测失败时用
  3. set ip=
  4. ::生成VBS脚本到临时目录
  5. (Echo Set oDOM = WScript.GetObject^(WScript.Arguments^(0^)^)&Echo Do until oDOM.readyState = "complete"&Echo WScript.sleep 200&Echo Loop&Echo WScript.Echo oDOM.documentElement.outerText)>"%temp%\webget.vbs"
  6. ::执行IP探测并记录到TXT,实质上是VBS脚本访问网络,返回文本。该功能可移做他用。
  7. cscript //NoLogo /e:vbscript "%temp%\webget.vbs" "http://fw.qq.com/ipaddress">"%temp%\ip.txt"
  8. ::将文本内容读入并赋值给变量作为IP。如果返回值不纯净,使用时可用形如%ip:~1,15%的规则截取。
  9. set/p ip=<%temp%\ip.txt
  10. ::IP数据格式处理
  11. set ip=%ip:~24,-3%
  12. set ip=%ip:","","=,%
  13. set ip=%ip:","=%
  14. ::发送短信提示
  15. "%ProgramFiles%\飞信聊天\fetion\fetion" --c --index=1 --to=13887057861 --msg-type=1 --msg-gb="提示:启动完毕。\n主机:%computername%\n用户:%username%\n地址:%ip%">nul
  16. ::发送邮件提示
复制代码
将%ip%经过若干处理后赋值给ip2

"%ProgramFiles%\飞信聊天\HQmail\HQmail" [email=664017840@qq.com]664017840@qq.com[/email] yjbj [email=65925768@qq.com]65925768@qq.com[/email] 启动:%computername%,%ip2%,%username% 提示:启动完毕。主机:%computername%,用户:%username%,地址:%ip%>nul

最后一句,发送邮件,我想在邮件主题中只保留IP地址而不要归属地,到此为止%ip%=IP地址,归属地。请各位大大帮忙处理一下,最好是处理结果填入上面红色区域即可使用。

[ 本帖最后由 hsj 于 2010-9-27 23:16 编辑 ]
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. @echo off
  2. ::获取本机外网IP、归属地并发送提醒!------------------------------------------------------------------
  3. ::预设变量值,探测失败时用
  4. set ip=
  5. ::生成VBS脚本到临时目录
  6. (Echo Set oDOM = WScript.GetObject^(WScript.Arguments^(0^)^)&Echo Do until oDOM.readyState = "complete"&Echo WScript.sleep 200&Echo Loop&Echo WScript.Echo oDOM.documentElement.outerText)>"%temp%\webget.vbs"
  7. ::执行IP探测并记录到TXT,实质上是VBS脚本访问网络,返回文本。该功能可移做他用。
  8. for /f "tokens=2 delims=,(" %%a in ('cscript //NoLogo /e:vbscript "%temp%\webget.vbs" "http://fw.qq.com/ipaddress"') do (
  9.     set "ip=%%a"
  10. )
  11. set "ip=%ip:~1,-1%"
  12. echo,%ip%
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

能解释一下
for /f "tokens=2 delims=,(" %%a in ('cscript //NoLogo /e:vbscript "%temp%\webget.vbs" "http://fw.qq.com/ipaddress"') do (
    set "ip=%%a"
)
这句的作用吗??
以前见过,但一直看不懂,do的前面貌似括号没有关闭,=,(" %%这里的引号在括号结尾处也没有与只相对应的引号来关闭,但是却能运行。
还有,好象到上面为之就已经摆平了,为什么还来一句
set "ip=%ip:~1,-1%"
(测试发现上面那句出来的结果是带引号的,这就是用来去掉引号的。但不知道这引号从哪来的。)
虚心求解,谢谢!

[ 本帖最后由 hsj 于 2010-9-27 22:58 编辑 ]

TOP

回复 3楼 的帖子

双引号从左到右,依次配对,你再数数?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

我在网上找了些资料,终于看懂了,是用for语句加上delims参数把字符分割成若干段然后用tokens参数提取需要的那(些)段。
"tokens=2 delims=,("  这里的 , 和 ( 其实是规定用来分割的符号,被我看成是语法括号了。
%ip%中出现的引号是原文分割以后带上的。这个也看明白了。

再次谢谢老大!第一次发贴提问就圆满成功。

TOP

回复 5楼 的帖子

推荐看看这个:批处理for命令从入门到精通以及配套练习题
http://bbs.bathome.net/thread-2189-1-1.html
http://bbs.bathome.net/thread-2336-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表