Batch file 将WHOIS文本记录转换为CSV
我正在尝试将文本WHOIS记录转换为CSV。基本上,该文件如下所示:Batch file 将WHOIS文本记录转换为CSV,batch-file,cmd,Batch File,Cmd,我正在尝试将文本WHOIS记录转换为CSV。基本上,该文件如下所示: WHOIS Source: ARIN IP Address: 8.8.8.8 Country: USA - California Network Name: LVLT-GOGL-8-8-8 Owner Name: Google LLC CIDR: 8.8.8.0/24 From IP: 8.8.8.0 To IP: 8.8.8.255 Allocated
WHOIS Source: ARIN
IP Address: 8.8.8.8
Country: USA - California
Network Name: LVLT-GOGL-8-8-8
Owner Name: Google LLC
CIDR: 8.8.8.0/24
From IP: 8.8.8.0
To IP: 8.8.8.255
Allocated: Yes
Contact Name: Google LLC
Address: 1600 Amphitheatre Parkway, Mountain View
Email: arin-contact@google.com
Abuse Email: network-abuse@google.com
Phone: +1-650-253-0000
Fax:
我认为我将每一行作为一个变量处理,截断变量以适应重要数据,然后在最后将其导出为CSV
比如说:
ARIN,8.8.8.8,USA - California,LVLT-GOGL-8-8-8,Google LLC,...
我更喜欢批处理,但如果有powershell选项也可以。我不是在寻找完整的代码,但可能只是一行或两行地址的一些行。我可以从那里处理
谢谢 对于每一行,在标题和数据中拆分,使用
为/f“tokens=*”
删除数据中的前导空格,并组合标题行和数据行。使用附加的if==
处理空数据字段(不需要else
,因为当值(%%b
)为空时,for…%%c
循环不执行do
部分
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,* delims=:" %%a in (whois.txt) do (
set "hdr=!hdr!"%%a","
if "%%b" == "" set "dta=!dta!"","
for /f "tokens=*" %%c in ("%%b") do (
set "dta=!dta!"%%c","
)
)
(
echo %hdr%
echo %dta%
)>whois.csv
代替(whois.txt)do(插入实际的whois
命令,如('whois xxxxx')do(
每个值周围的引号可防止散乱的逗号(如地址:
行)和空值(如传真:
行)
(对于完整的代码很抱歉,但要将其拆分为“提示”而不变得太模糊是很困难的)在CMD脚本中,它相当直接:
@(
ECHO OFF
SETLOCAL Enable DelayedExpansion
SET "_SrcPath=C:\Temp\ArinWhois\RecordFiless"
SET "_SrcFileGlob=*.txt"
SET "_DstFilePath=C:\Temp\ArinWhois\ResultFile.csv"
SET "_Header=1"
)
REM Loop the Files in the Path to allow us to know when moving from one to the next
FOR %%a IN (
"%_SrcPath%\%_SrcFileGlob%"
) DO (
REM on starting each file Set the Row variable to Empty
SET "_Row="
REM Loop the File and Extract the Terms
FOR /F "Tokens=1* Delims=:" %%A IN (%%a) DO (
IF DEFINED _Header (
REM Strip the leading and trailing spaces from the Header Term
FOR /F "Tokens=*" %%b IN ("%%A") DO (
IF NOT DEFINED _HeaderRow (
SET "_HeaderRow=%%~nb"
) ELSE (
SET "_HeaderRow=!_HeaderRow!,%%~nb"
)
)
)
REM Strip the leading and trailing spaces from the Term.
FOR /F "Tokens=*" %%b IN ("%%B") DO (
SET "_TmpTerm=%%~pnb"
IF NOT DEFINED _Row (
SET "_Row=!_TmpTerm:~1!"
) ELSE (
SET "_Row=!_Row!,!_TmpTerm:~1!"
)
)
)
IF DEFINED _Header (
SET "_Header="
ECHO.!_HeaderRow!
ECHO.!_HeaderRow!>"%_DstFilePath%"
)
ECHO.!_Row!
ECHO.!_Row!>>"%_DstFilePath%"
)
PAUSE
TYPE "%_DstFilePath%"
PAUSE
逻辑流程基本上如下所示:
- 步骤1:循环文件列表
- 步骤2:使用循环解析每个文件的每一行,按
:
- 第3步:如果第一次运行,我们将要设置一个标题,这样我们将获取行的前半部分中找到的术语并创建一个标题。如果我们已经完成了这项工作,我们将跳过它
- 步骤4:无论是标题项还是行项,我们都希望删除前导空格和尾随空格,要做到这一点,最简单的方法是使用另一个循环和临时变量
- 步骤5:输出标题(如果适用)
- 步骤6:处理每个文件后输出行
-split
,方法trim()
,以及cmdlet导出CSV
。一个单行PowerShell解决方案,将WhoIs.txt
转换为WhoIs.CSV
,标题为[PSCustomObject]((获取内容。\WhoIs.txt-raw)-替换“:*”,“=”|从StringData转换)|导出CSV WhoIs.CSV-NoTypeInfo