我已经尝试了很多方法来实现这一点,通过批处理脚本检索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位数的固定长度?
答案 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
)