Board logo

标题: [文本处理] 求助批处理如何实现截取特定字符串 [打印本页]

作者: dmxiaoma    时间: 2017-6-22 16:10     标题: 求助批处理如何实现截取特定字符串

本帖最后由 pcl_test 于 2017-6-22 16:20 编辑

有两种情况:
{"192.168.1.109", "fe80::e896:88ef:3c9f:8152"}  44:39:C4:52:68:47

{"192.168.1.109"}  44:39:C4:52:68:47
不管哪种情况,求截取44:39:C4:52:68:47出来的代码。万分感谢
作者: zghwelcome    时间: 2017-6-22 17:01

  1. @echo off
  2. set str1={"192.168.1.109", "fe80::e896:88ef:3c9f:8152"}  44:39:C4:52:68:47
  3. set str2={"192.168.1.109"}  44:39:C4:52:68:47
  4. call :_GetMac "%str1%"
  5. call :_GetMac "%str2%"
  6. pause
  7. exit
  8. :_GetMac
  9. for /f "tokens=2 delims=}" %%a in ("%~1") do echo,%%a
  10. goto :EOF
  11. :EOF
复制代码

作者: cfwyy77_bat    时间: 2017-6-22 21:34

来个gawk 玩玩
  1. echo {"192.168.1.109", "fe80::e896:88ef:3c9f:8152"}  44:39:C4:52:68:47 | gawk "{print $NF}"
  2. echo {"192.168.1.109"}  44:39:C4:52:68:47 | gawk "{print $NF}"
复制代码

作者: taofan712    时间: 2017-6-22 21:40

echo;%var:~-17%
作者: /zhqsystem/zhq    时间: 2017-6-23 00:32

  1. set "$="
  2. call:1 !$!
  3. echo,!$!
  4. pause&&exit
  5. :1
  6. set "$=%1"
  7. set "$=!$: =!"
  8. if /i "%2"=="" goto:eof
  9. shift
  10. goto:1
复制代码

作者: dmxiaoma    时间: 2017-6-23 00:47

感谢大家的热情帮助。
还有个问题请教:
如上截取出来的结果是  44:39:C4:52:68:47 我是放在变量mac里面的
比如我要显示出来就是echo, MAC地址^: %MAC%
我不想结果中有“:”号就改成 echo, MAC地址^: %MAC::=%
假如结果中有还有其它内容我也想替换掉
比如结果是 44:-39:-C4:-52:-68:-47
我要同时去掉:号和-号
echo, MAC地址^: %MAC::=%   要怎么改代码?
作者: dmxiaoma    时间: 2017-6-23 00:54

回复 3# cfwyy77_bat
我运行代码后提示:
'gawk' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

gawk是什么?是需要装什么程序吗?
新手小白,不好意思了。
作者: ShowCode    时间: 2017-6-23 09:30

回复 7# dmxiaoma


下载之后跟你的bat文件放在同一个目录
http://bbs.bathome.net/s/tool/index.html?key=gawk
作者: ShowCode    时间: 2017-6-23 09:58

回复 6# dmxiaoma


例子:
  1. @echo off
  2. set str1=44:-39:-C4:-52:-68:-47
  3. set str2=%str1::=%
  4. echo %str2%
  5. set str3=%str2:-=%
  6. echo %str3%
  7. pause
复制代码

作者: cfwyy77_bat    时间: 2017-6-23 11:11

回复 7# dmxiaoma
gawk 是第三方的 文本处理工具。  原来在linux 很流行的,也有移植到windows的版本。你可以在坛子里找找相关资料,坛子里也有下载。这东东功能强大,比较复杂。
想学好用好 不是几天的事,我也是新手,刚学这个。
作者: dmxiaoma    时间: 2017-6-23 15:44

谢谢大家的热心帮助,辛苦了!
作者: happy886rr    时间: 2017-6-23 16:35

本帖最后由 happy886rr 于 2017-6-23 16:36 编辑

回复 11# dmxiaoma
常用符号通吃
  1. @echo off
  2. for /f "tokens=1-6 delims=:-" %%a in ("44:-39:-C4:-52:-68:-47") do (
  3. echo %%a%%b%%c%%d%%e%%f
  4. )
  5. pause
复制代码

作者: 会飞的蜗牛丶    时间: 2017-6-28 12:02

本帖最后由 会飞的蜗牛丶 于 2017-6-28 12:03 编辑
  1. set "str={"192.168.1.109", "fe80::e896:88ef:3c9f:8152"}  44:39:C4:52:68:47"
  2. set "str1={"192.168.1.109"}  44:39:C4:52:68:47"
  3. echo %str:*}  =%
  4. echo %str1:*}  =%
复制代码

作者: dmxiaoma    时间: 2017-6-28 17:36

本帖最后由 dmxiaoma 于 2017-6-28 17:38 编辑

回复 13# 会飞的蜗牛丶

还可以这样哦,这方法真好,代码又简单
如果我要把:号也同时去掉是这样改么:
echo %str:*}  :=%
echo %str1:*}  :=%
作者: ShowCode    时间: 2017-6-28 19:59

回复 14# dmxiaoma


    不是。
作者: paladinjin    时间: 2017-6-28 22:11

好长时间 没搞了 我只知道 用FOR可以解决
作者: 会飞的蜗牛丶    时间: 2017-6-30 10:36

回复 14# dmxiaoma
这样写
  1. set "str={"192.168.1.109", "fe80::e896:88ef:3c9f:8152"}  44:39:C4:52:68:47"
  2. set "str1={"192.168.1.109"}  44:39:C4:52:68:47"
  3. set "str=%str::=%"
  4. set "str1=%str1::=%"
  5. echo %str:*}  =%
  6. echo %str1:*}  =%
复制代码

作者: dmxiaoma    时间: 2017-7-1 14:26

回复 17# 会飞的蜗牛丶
谢谢,学到知识了!
简洁、效率




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2