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

[文本处理] 批处理如何截取ip地址值的前2位?

[复制链接]
发表于 2014-8-28 10:32:45 | 显示全部楼层 |阅读模式
比如某变量a值为 192.168.1.2

截取后192.168赋予变量b

求赐教!
发表于 2014-8-28 10:38:45 | 显示全部楼层
  1. set a=192.168.1.2
  2. set b=%a:~0,7%
复制代码
 楼主| 发表于 2014-8-28 10:57:11 | 显示全部楼层
Linuxer 发表于 2014-8-28 10:38



    ip也有可能10.112.1.1 这样哦 不是7位
发表于 2014-8-28 12:28:26 | 显示全部楼层
回复 3# ditto


    那就用for循环
  1. @echo off
  2. set a=10.112.1.1
  3. for /f "delims=. tokens=1,2" %%i in ("%a%") do (set b=%%i.%%j)
  4. echo %b%
  5. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 正统解法

查看全部评分

发表于 2014-8-28 12:37:28 | 显示全部楼层
如何获取ip地址?
发表于 2014-8-28 13:13:27 | 显示全部楼层
  1. @echo off & setlocal enabledelayedexpansion
  2. set "a=192.168.1.2"
  3. set b=%a:*.=%
  4. set b=!a:.%b%=!.!b:.%b:*.=%=!
  5. echo %b%
  6. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 非常规思路(从这楼开始不正经了)

查看全部评分

发表于 2014-8-28 13:39:06 | 显示全部楼层
本帖最后由 Linuxer 于 2014-8-28 13:42 编辑

回复 5# 牛虻
win7
  1. @echo off
  2. for /f "delims=: tokens=2" %%i in ('ipconfig ^| find /i "IPv4"') do echo %%i
  3. pause>nul
复制代码
xp
  1. @echo off
  2. for /f "delims=: tokens=2" %%i in ('ipconfig ^| find /i "IP Address"') do echo %%i
  3. pause>nul
复制代码
发表于 2014-8-28 14:29:46 | 显示全部楼层
本帖最后由 523066680 于 2014-8-28 14:41 编辑

前两节,前两段。。。
  1. @echo off
  2. set ip=192.168.1.1
  3. call :next %ip:.= %
  4. pause
  5. exit

  6. :next
  7.     echo %1.%2
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 为了 idea

查看全部评分

发表于 2014-8-28 15:09:45 | 显示全部楼层
回复 8# 523066680


  哈哈,%1,%2用起来真爽,,,学习了。
发表于 2014-8-28 15:20:34 | 显示全部楼层
继续放出另类解...
  1. @echo off
  2. set ip=192.168.1.1
  3. (set b=)&(set a=%ip:.=)&(if not defined b set b=%)
  4. echo %a%.%b%
  5. pause
复制代码
发表于 2014-8-28 15:38:37 | 显示全部楼层
回复 8# 523066680


来一个
  1. @echo off
  2. %1 set ip=192.168.1.1
  3. %1 %0 : %ip:.= %&eixt/b
  4. echo %2.%3
复制代码
我蛋疼得...其实真还不如 call
发表于 2014-8-28 15:43:15 | 显示全部楼层
回复 10# CrLf


    的确另类。。不太理解。。大神可否解释一二~~有关第三行的
  1. (set b=)&(set a=%ip:.=)&(if not defined b set b=%)
复制代码
发表于 2014-8-28 16:09:41 | 显示全部楼层
回复 12# Linuxer
我理解的流程是替换
执行语句是这样  不知对否
  1. set b=&(set a=192)&(if not defined b set b=168)&(if not defined b set b=1)&(if not defined b set b=2)
复制代码
发表于 2014-8-28 16:16:52 | 显示全部楼层
回复 12# Linuxer
  1. (set b=)&(set a=%ip:.=)&(if not defined b set b=%)
复制代码
分两部分解释下:
1、(set b=)
设置 %b% 为空
2、(set a=%ip:.=)&(if not defined b set b=%)
预处理时会将 %ip% 中的 . 替换为 )&(if not defined b set b=
这样就变成了:
  1. )&(if not defined b set b=168)&(if not defined b set b=1)&(if not defined b set b=1
复制代码
加上前后缀就是:
  1. (set a=192)&(if not defined b set b=168)&(if not defined b set b=1)&(if not defined b set b=1)
复制代码
------------------------------------------------------------------------------------------------
所以整行的作用相当于执行了
  1. set b=
  2. set a=192
  3. if not defined b set b=168
  4. if not defined b set b=1
  5. if not defined b set b=1
复制代码
这样就明了了吧
发表于 2014-8-28 16:23:56 | 显示全部楼层
本帖最后由 CrLf 于 2014-8-28 17:00 编辑

回复 13# terse


    是的~再来一个更精简的
  1. @echo off
  2. set ip=192.168.1.1
  3. (set a=%ip:.=)&&set 2>nul /a 1/!-~(b=%)
  4. echo %a%.%b%
  5. pause
复制代码
如果看不懂,去掉 @echo off 运行一下应该就差不多明白了
-~ 作用有点像 ++,用来兼容值为 0 的部分,相应的,~- 有点像 --,至于为什么...百度“按位取反”和“int 类型正负数的区别”
话说这代码可读性约等于 0,玩玩可以,练技巧活思路而已,终究不是正道
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 04:33 , Processed in 0.023214 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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