[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

比如某变量a值为 192.168.1.2

截取后192.168赋予变量b

求赐教!

  1. set a=192.168.1.2
  2. set b=%a:~0,7%
复制代码

TOP

Linuxer 发表于 2014-8-28 10:38



    ip也有可能10.112.1.1 这样哦 不是7位

TOP

回复 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

评分人数

    • CrLf: 正统解法技术 + 1

TOP

如何获取ip地址?

TOP

  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

评分人数

    • CrLf: 非常规思路(从这楼开始不正经了)技术 + 1

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 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

评分人数

    • CrLf: 为了 idea技术 + 1

TOP

回复 8# 523066680


  哈哈,%1,%2用起来真爽,,,学习了。

TOP

继续放出另类解...
  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
复制代码

TOP

回复 8# 523066680


来一个
  1. @echo off
  2. %1 set ip=192.168.1.1
  3. %1 %0 : %ip:.= %&eixt/b
  4. echo %2.%3
复制代码
我蛋疼得...其实真还不如 call

TOP

回复 10# CrLf


    的确另类。。不太理解。。大神可否解释一二~~有关第三行的
  1. (set b=)&(set a=%ip:.=)&(if not defined b set b=%)
复制代码

TOP

回复 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)
复制代码

TOP

回复 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
复制代码
这样就明了了吧

TOP

本帖最后由 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,玩玩可以,练技巧活思路而已,终究不是正道

TOP

返回列表