标题: [文件操作] [已解决]批处理for命令怎样截取字符? [打印本页]
作者: 秋风·飞扬 时间: 2012-5-2 21:31 标题: [已解决]批处理for命令怎样截取字符?
大家好,我有个问题想求助一下。
首先来说这个命令“netsh interface show interface”
这个命令列出了本机上的一些连接
管理员状态 状态 类型
----------------------------------------------------------------------------
启用 专用 本地连接
启用 专用 环回
启用 专用 VMware Network Adapter VMnet8
启用 专用 VMware Network Adapter VMnet1
---------------------------------------------------------------------------------
就简单列举这么多 我的目的 就是将VMware Network Adapter VMnet8
VMware Network Adapter VMnet1
这两行单独列出来
虚拟机本地连接列表:
VMware Network Adapter VMnet1
VMware Network Adapter VMnet8
作者: 秋风·飞扬 时间: 2012-5-2 21:38
回复 1# 秋风·飞扬 - for /f "skip3 tokens=3*" %%a in ('netsh interface show interface ') do (
- if %%a = VMware echo %%a
- )
复制代码
以上是我写的第一个代码,只能输出单词 ,①我试着吧3*改成3-6还是不行。
②不加delims=还好,加上了根本就什么都不输出了。
作者: 秋风·飞扬 时间: 2012-5-2 21:47
回复 2# 秋风·飞扬 - for /f "skip=3 tokens=3" %%a in ('netsh interface show interface') do (
- set /a n+=1
- if %%a =VMware ( for /f "skip=3 tokens=*" %%c in ('netsh interface show interface') do (
- set /a m+=1
- if !m!=!n! echo %%c & set m=0
- )))
复制代码
在接近崩溃的情况下 ,我的思维越来越复杂,就写出了这样一个代码。因为2楼的代码无论我怎么改都不能完整输出,所以我用这种匹配VWware关键字的方法来套一个for循环再整行输出,但是!输多了,VMware Network Adaper VMnet 1 输出了两次 又输出别的连接一次,我实在是没辙了,不好意思麻烦大家了~
作者: gawk 时间: 2012-5-2 22:20
- netsh interface show interface | find "VMware Network Adapter VMnet"
复制代码
作者: CrLf 时间: 2012-5-2 23:16
把 for /f 掌握好了就不成问题- @echo off
- for /f "tokens=2*" %%a in ('netsh interface show interface') do (
- for "delims=0123456789" %%c in ("%%b") do (
- if "%%c"=="VMware Network Adapter VMnet" echo %%b
- )
- )
复制代码
作者: 秋风·飞扬 时间: 2012-5-3 12:26
回复 4# gawk
多谢多谢,这个方法刚开始用了,但开始的时候不知道怎么输出
作者: 秋风·飞扬 时间: 2012-5-3 12:28
回复 5# CrLf
谢版主,我继续试验,我还有一事不明,我2楼代码的几个问题,为什么会出现那些问题
作者: gawk 时间: 2012-5-3 15:37
回复 7# 秋风·飞扬
因为CMD不认识%%a = VMware这种你自己发明的语法
作者: 秋风·飞扬 时间: 2012-5-3 15:47
回复 8# gawk
- - 好吧,新手上路多多指教,其实我的意思能不能让if 语句判断结果与字符串是否相等,相等 就输出那一行,我是不是应该吧VMware后面的全部写上?
作者: gawk 时间: 2012-5-3 15:58
回复 9# 秋风·飞扬
指教谈不上,先给个建议吧。当你想问是不是xxx或者xxx行不行之前,冷静一下,暂不发帖,亲自试试先。如果没有测试成功再问。还有,仔细数一数你的代码和别人的代码里各有几个等号。
作者: CrLf 时间: 2012-5-3 17:29
回复 9# 秋风·飞扬
if /?
string1==string2 如果指定的文字字符串匹配,指定条件为 true。
作者: 秋风·飞扬 时间: 2012-5-3 19:13
回复 10# gawk
昨天确实山穷水尽了,水平在那里摆着呢,你也看出来了我这个号是新注册不久的,昨天连三个小时都在测试那个,我脑袋又笨,出现问题再所难免啊,左试右试都试不出来,才来发帖的
作者: 秋风·飞扬 时间: 2012-5-3 19:13
回复 11# CrLf
我就说有这个嘛,哈哈 ,放学了,去弄批处理
作者: 秋风·飞扬 时间: 2012-5-3 19:14
回复 10# gawk
等号的问题,这个以后我会注意的
作者: 秋风·飞扬 时间: 2012-5-3 19:20
回复 10# gawk
我的问题是不是很烦人?
作者: 秋风·飞扬 时间: 2012-5-3 19:53
回复 3# 秋风·飞扬 - for /f "skip=3 tokens=3" %%a in ('netsh interface show interface') do (
-
- set /a n+=1
- set m=0
-
-
- if "%%a" ="VMware" for /f "skip=3 tokens=*" %%c in ('netsh interface show interface') do (
-
- set /a m+=1
-
- if !m!==!n! echo %%c
- ))
复制代码
代码已改正,昨天脑袋让驴踹了,以至于问得别人烦了。 第一个for循环是提取字符 vmware 如果相等继续运行第二个for循环,上面循环的次数是n ,下面的是m ,m=n的时候就是VMware那一行,然后输出整行就可以了,上下skip要相等 否则会影响n 值和m值的比较
作者: 秋风·飞扬 时间: 2012-5-3 20:01
回复 4# gawk
这个代码比我的简单实用,我又复杂了
作者: CrLf 时间: 2012-5-3 21:19
回复 14# 秋风·飞扬
我刚写批的时候也总是搞混 if str1==str2 和 set var=str,写多见多了习惯就好,有其他语言基础也有助于理解
作者: 秋风·飞扬 时间: 2012-5-3 22:48
回复 18# CrLf
谢谢版主鼓励
作者: 秋风·飞扬 时间: 2012-5-3 22:48
回复 16# 秋风·飞扬
VM前面少了一个等号 - -
作者: gawk 时间: 2012-5-3 23:13
回复 15# 秋风·飞扬
正常,初学者往往找不到最好的学习方法,多多改善就行了。
作者: 秋风·飞扬 时间: 2012-5-7 10:34
回复 2# 秋风·飞扬
楼主明显对for命令的基础掌握不牢,提取多个字符你只用一个变量来接受??%%a %%b .........这样子才能显示出来,以后得细心一点
作者: 秋风·飞扬 时间: 2012-5-7 10:35
回复 22# 秋风·飞扬
哦 谢谢,知道了,怪不得人家不愿意理这种问题
作者: 秋风·飞扬 时间: 2012-5-7 10:37
回复 23# 秋风·飞扬
还有就是你问问题的时候先别着忙发帖,多试验几次,把你写的代码再规范一下,免得出瞅。
作者: 秋风·飞扬 时间: 2012-5-7 10:37
回复 24# 秋风·飞扬
咱们两个号码一样的啊?名字也是一样的啊。你寄生在我的电脑里?你是黑客吗?
作者: 秋风·飞扬 时间: 2012-5-7 10:39
回复 25# 秋风·飞扬
可以这么说。但这个不重要,我一直在帮你,AV网站是我屏蔽的,以后安心学习吧,游戏超过半小时就会自动退出的,其实我挺看好你的。
作者: 秋风·飞扬 时间: 2012-5-7 10:40
回复 26# 秋风·飞扬
不要盗我号啊,我有好多贵重的文件
作者: 秋风·飞扬 时间: 2012-5-7 10:42
回复 27# 秋风·飞扬
不会的。放心吧,我只是好奇你,但不会做什么恶劣的事情,好好学习吧,你自己混论坛吧,说实话,他们的技术资料我也看过了,技术是有但是写的不够大众化,你自己要慢慢理解,我下了。
作者: 秋风·飞扬 时间: 2012-5-7 10:42
回复 28# 秋风·飞扬
额.............
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |