检索IP并填充0的BAT

时间:2016-10-21 18:51:13

标签: windows batch-file command-line

我已经尝试了很多方法来实现这一点,通过批处理脚本检索IP,然后剥离点(。)并将所有子段填充为3个数字的长度,例如:

192.168.59.1应为192168059001

到目前为止,我已经想出了这个:

set "str2=.pfx"
for /f "delims=[] tokens=2" %%a in ('ping %computername% -4 -n  1 ^| findstr "["') do (set thisip=%%a)
SET _result=%thisip:.=%
SET "ip=%_result%%str2%"

相反,我得到:_result = 192168591,我试图以下列方式添加00:

set "str2=.pfx"
for /f "delims=[] tokens=2" %%a in ('ping %computername% -4 -n  1 ^| findstr "["') do (set thisip=00%%a)
SET _result=%thisip:.=00%
SET "ip=%_result%%str2%"

我得到:_result = 00192001680059001

如何为每个子段保留3位数的固定长度?

5 个答案:

答案 0 :(得分:1)

for /f "delims=[] tokens=2" %%a in ('ping %computername% -4 -n  1 ^| findstr "["') do (set thisip=%%a)

for /f "tokens=1-4 delims=." %%a in ("%thisip%") do (
  set a=00%%a
  set b=00%%b
  set c=00%%c
  set d=00%%d
)
echo %a:~-3%%b:~-3%%c:~-3%%d:~-3% 

答案 1 :(得分:1)

@echo off
setlocal EnableDelayedExpansion

for /F "delims=[] tokens=2" %%a in ('ping %computername% -4 -n 1') do set "thisip=%%a"
set "_result="
for %%a in (%thisip:.=,%) do set "part=00%%a" & set "_result=!_result!!part:~-3!"
echo %_result%

答案 2 :(得分:0)

试试这个:

@ECHO OFF
FOR /F "TOKENS=2-5 DELIMS=[.]" %%A in ('PING -n 1 "%COMPUTERNAME%" -4') DO (
    IF DEFINED ONE GOTO :EndIt
    SET/A ONE=100%%A, TWO=100%%B, THREE=100%%C, FOUR=100%%D
    CALL SET MyIP=%%ONE:~-3%%%%TWO:~-3%%%%THREE:~-3%%%%FOUR:~-3%%)
:EndIt
ECHO=%MyIP%
TIMEOUT -1 1>NUL

答案 3 :(得分:0)

这是一个单线PowerShell解决方案:

PowerShell.exe -c "'{0:000}{1:000}{2:000}{3:000}' -f [BitConverter]::GetBytes([Net.Dns]::GetHostByName($env:COMPUTERNAME).AddressList[0].Address)[0..3]"

[Net.Dns]::GetHostByName($env:COMPUTERNAME)使用.NET的GetHostByName函数获取本地计算机的IP地址。然后,此脚本获取AddressList字段的第一个元素并获取其整数Address属性。然后GetBytes方法将其转换为字节数组。然后使用.NET格式字符串{N:000}对其中的前4个进行格式化,以打印为整数,零填充为三位小数。

此方法使用DNS API查找地址,这意味着它不会发送ping并等待它返回。

调用PowerShell的缺点是将.NET框架加载到内存中会增加一些延迟(尽管比运行PING少得多)。如果您没有在同一台计算机上运行任何.NET,C#或PowerShell应用程序,这只是一个问题。

答案 4 :(得分:0)

仅包含没有子字符串操作的解决方案

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "host=%~1" & if not defined host set "host=localhost"

    for /f "tokens=2 delims=[]" %%z in ('ping -4 -n 1 %host%') do (
        for /f "tokens=1-4 delims=." %%a in ("%%z") do for /f "delims=" %%e in ('
            for %%f in (%%a %%b %%c %%d^) do @(
                set/a"%%f/100"^&set/a"%%f%%100/10"^&set/a"%%f%%10"
            ^)
        ') do echo Host [%host%] = %%z = %%e
    )