找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 18946|回复: 5

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

[复制链接]
发表于 2010-9-27 21:59:52 | 显示全部楼层 |阅读模式
批处理如何去除变量中指定字符及其后的所有字符?
比如说,我有以下代码段,得到了本机的外网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" 664017840@qq.com yjbj 65925768@qq.com 启动:%computername%,%ip2%,%username% 提示:启动完毕。主机:%computername%,用户:%username%,地址:%ip%>nul

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

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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2010-9-27 22:30:36 | 显示全部楼层
  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%
复制代码
 楼主| 发表于 2010-9-27 22:37:04 | 显示全部楼层
能解释一下
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 编辑 ]
发表于 2010-9-27 23:04:25 | 显示全部楼层

回复 3楼 的帖子

双引号从左到右,依次配对,你再数数?
 楼主| 发表于 2010-9-27 23:16:10 | 显示全部楼层
我在网上找了些资料,终于看懂了,是用for语句加上delims参数把字符分割成若干段然后用tokens参数提取需要的那(些)段。
"tokens=2 delims=,("  这里的 , 和 ( 其实是规定用来分割的符号,被我看成是语法括号了。
%ip%中出现的引号是原文分割以后带上的。这个也看明白了。

再次谢谢老大!第一次发贴提问就圆满成功。
发表于 2010-9-27 23:25:25 | 显示全部楼层

回复 5楼 的帖子

推荐看看这个:批处理for命令从入门到精通以及配套练习题
http://bbs.bathome.net/thread-2189-1-1.html
http://bbs.bathome.net/thread-2336-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 20:37 , Processed in 0.020297 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表