返回列表 发帖

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

比如某变量a值为 192.168.1.2

截取后192.168赋予变量b

求赐教!

set a=192.168.1.2
set b=%a:~0,7%COPY

TOP

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



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

TOP

回复 3# ditto


    那就用for循环
@echo off
set a=10.112.1.1
for /f "delims=. tokens=1,2" %%i in ("%a%") do (set b=%%i.%%j)
echo %b%
pauseCOPY
1

评分人数

    • CrLf: 正统解法技术 + 1

TOP

如何获取ip地址?

TOP

@echo off & setlocal enabledelayedexpansion
set "a=192.168.1.2"
set b=%a:*.=%
set b=!a:.%b%=!.!b:.%b:*.=%=!
echo %b%
pauseCOPY
1

评分人数

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

TOP

本帖最后由 Linuxer 于 2014-8-28 13:42 编辑

回复 5# 牛虻
win7
@echo off
for /f "delims=: tokens=2" %%i in ('ipconfig ^| find /i "IPv4"') do echo %%i
pause>nulCOPY
xp
@echo off
for /f "delims=: tokens=2" %%i in ('ipconfig ^| find /i "IP Address"') do echo %%i
pause>nulCOPY

TOP

本帖最后由 523066680 于 2014-8-28 14:41 编辑

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

评分人数

    • CrLf: 为了 idea技术 + 1
[url=][/url]

TOP

回复 8# 523066680


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

TOP

继续放出另类解...
@echo off
set ip=192.168.1.1
(set b=)&(set a=%ip:.=)&(if not defined b set b=%)
echo %a%.%b%
pauseCOPY

TOP

回复 8# 523066680


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

TOP

回复 10# CrLf


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

TOP

回复 12# Linuxer
我理解的流程是替换
执行语句是这样  不知对否
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)COPY

TOP

回复 12# Linuxer
(set b=)&(set a=%ip:.=)&(if not defined b set b=%)COPY
分两部分解释下:
1、(set b=)
设置 %b% 为空
2、(set a=%ip:.=)&(if not defined b set b=%)
预处理时会将 %ip% 中的 . 替换为 )&(if not defined b set b=
这样就变成了:
)&(if not defined b set b=168)&(if not defined b set b=1)&(if not defined b set b=1COPY
加上前后缀就是:
(set a=192)&(if not defined b set b=168)&(if not defined b set b=1)&(if not defined b set b=1)COPY
------------------------------------------------------------------------------------------------
所以整行的作用相当于执行了
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=1COPY
这样就明了了吧

TOP

本帖最后由 CrLf 于 2014-8-28 17:00 编辑

回复 13# terse


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

TOP

返回列表