我已经找到了一种在线方式来获取用户输入十六进制数字并将其转换为十进制但我想通过传递一个十六进制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'之后无济于事。
另外,我想我的转换总数会出现问题,而不是输出四个八位字节。是否一次传递两个十六进制值是避免发生这种情况的最佳方法?
答案 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++
}