for 命令挖坑

for命令了解下。
今天有个想法想自动将内网的主机对应的ip地址输出
内网主机命令用net view
首先看命令格式


FOR %variable IN (set) DO command [command-parameters]
%variable //指定一个单一字母可替换的参数
set //指定单个或一组文件。可以使用通配符。
command //指定对每个文件执行的命令
command-parameters //为特定命令指定参数或者命令行开关


写下代码就发现这里好个坑:第一variable必须只有一个字母。
所以
FOR %%l in (looks,good) DO echo %%l 可以
FOR %%line in (looks,good) DO echo %%line 不行


第一关
默认情况下,可替换参数会依次替换set中的内容比如:
FOR %%l in (looks,good) DO echo %%l 输出
looks
good
当然,用空格分割也是可以的:
FOR %%l in (looks good) DO echo %%l 输出
looks
good


第二关
很显然如果只支持如上简单功能就太弱了
所以日常常用的是对文件的处理
于是就有/f扩展专门针对文件处理
此时set部分的内容就被扩展了
于是有如下参数格式:
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
首先关注下file-set表示多个文件名的集合
于是可以同时指定两个文件的用法如下:
FOR /f %%l in (data, host) DO echo %%l
再看string说明可以直接些写入数据作为文件的内容被处理
FOR /f %%l in ("looksgood") DO echo %%l 输出
looksgood
小坑一个:引号之间的内容不能有空格否者只能读取空格前内容:
FOR /f %%l in ("looks good") DO echo %%l 输出
looks
原因是默认/f默认对每一行中空格作为分隔符
所以上面例子中要是想输出good就得再设置两个地方:
(1)告诉解析器你要输出匹配到的第几个
这里前两个所以需要在option字串里添加“tokens=1,2”
(2)%%l代表第一个,那么第二个就得是字母顺序的%%m
所以最终如下:
FOR /f "tokens=1,2" %%l in ("looks good") DO echo %%l %%m
这样输出 looks good
最后关注下command这个用法
这个意思好想说可以用命令的结果作为文件内容
一试真可以
FOR /F %%l in ('net view') DO echo %%l
还是多说一句这个和linux系统中反引号类似的功能却用的正引号
终于能正常匹配到主机名
还是用常见的ijk来代表循环变量
FOR /f "tokens=1" %%i in ('net view') DO echo %%i
但是很显然我只需要以\\开头的有效数据
所以忽略前三行
FOR /f "tokens=1 skip=3" %%i in ('net view') DO echo %%i
但是说实在最后一行还是去不掉


那就干脆在循环里处理
于是需要判断字串的开头是不是特定格式开始
这牵扯到substring语法
终于折腾半天如下:
这里写图片描述
不得不说bat很不好用
坑多还不好调试
就当着玩玩吧


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值