Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 将WHOIS文本记录转换为CSV_Batch File_Cmd - Fatal编程技术网

Batch file 将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记录转换为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:    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:处理每个文件后输出行

您尝试过什么?不是脚本编写服务。我们期待您自己的研究和认真的编码尝试。对于批处理以及powershell,也有类似的问题和解决方案。我建议您注意powershell操作员
-split
,方法
trim()
,以及cmdlet
导出CSV
。一个单行PowerShell解决方案,将
WhoIs.txt
转换为
WhoIs.CSV
,标题为
[PSCustomObject]((获取内容。\WhoIs.txt-raw)-替换“:*”,“=”|从StringData转换)|导出CSV WhoIs.CSV-NoTypeInfo