在批处理中如何获取转换为十六进制的IP列表并将其作为十进制输出到文件?

时间:2014-01-16 11:14:13

标签: batch-file

我已经找到了一种在线方式来获取用户输入十六进制数字并将其转换为十进制但我想通过传递一个十六进制IP列表(每行一个,以E00000FC的短格式)添加它,例如)并以相同的格式将转换输入到另一个文件。

到目前为止,我有:

SETLOCAL
set /a dec=0x%~1
( ENDLOCAL & REM RETURN VALUES
    IF "%~2" NEQ "" (SET %~2=%dec%) ELSE ECHO.%dec% > dec_list.txt
)
EXIT /b

我试图添加:

FOR /F "eol= delims=, " %i in (hex_list.txt) do

'SETLOCAL'之后无济于事。

另外,我想我的转换总数会出现问题,而不是输出四个八位字节。是否一次传递两个十六进制值是避免发生这种情况的最佳方法?

3 个答案:

答案 0 :(得分:3)

@echo off
setlocal EnableDelayedExpansion

(for /F %%a in (input.txt) do (
   set hex=%%a
   set "dec="
   for /L %%i in (0,2,6) do (
      set /A num=0x!hex:~%%i,2!
      set dec=!dec!.!num!
   )
   echo !dec:~1!
)) > output.txt

答案 1 :(得分:2)

以下是纯批次

的方法
@echo off
setlocal

for /f %%a in (hexips.txt) do (
   set "hexip=%%a"
   call :convert 
)
exit /b

:convert
set first=%hexip:~0,2%
set second=%hexip:~2,2%
set third=%hexip:~4,2%
set fourth=%hexip:~6,2%
set /a oct1=0x%first%
set /a oct2=0x%second%
set /a oct3=0x%third%
set /a oct4=0x%fourth%
echo %oct1%.%oct2%.%oct3%.%oct4%>>newfile.txt

答案 2 :(得分:1)

不确定这是否有用,但我将每个八位字节与powershell分开。

$Octet1 = "{0:D}" -f 0xE0
$Octet2 = "{0:D}" -f 0x00
$Octet3 = "{0:D}" -f 0x00
$Octet4 = "{0:D}" -f 0xFC
$IPAddress = $Octet1 +"."+ $Octet2 +"."+ $Octet3 +"."+ $Octet4
$IPAddress

结果

224.0.0.252

我想可以像这样批量完成。

@ECHO OFF
CLS
start /b /wait powershell.exe -command "$Octet1 = '{0:D}' -f 0xE0;$Octet2 = '{0:D}' -f 0x00;$Octet3 = '{0:D}' -f 0x00;$Octet4 = '{0:D}' -f 0xFC;$IPAddress = $Octet1 +'.'+ $Octet2 +'.'+ $Octet3 +'.'+ $Octet4;$IPAddress;"
PAUSE

这是从.txt文件读取的开头。稍后我会再花一些时间来研究它。这会将十六进制分成4个八位字节,只需要完全重写上面的$ octet内容即可使用管道对象。

$i = 0
$lines = Get-Content "B:\File1.txt"
foreach ($line in $lines) {
$line -split '([a-f0-9]{2})'| foreach-object { if ($_) {[System.Convert]::ToByte($_,16)}}
$i++
}