批处理以处理第3个令牌,然后将输出作为第4个令牌附加到行

时间:2018-01-31 03:17:30

标签: windows batch-file batch-processing

我正在尝试修改输入文件格式已更改的批处理(由于我无法控制的情况)

该文件过去只包含带有字符串的行,我必须在decode.exe之后将其作为参数运行 例如......

or71q238hdekb6gbq27ge56fz

但是现在格式已经改变了,我需要的字符串现在是第3个令牌(就是这样吗?就是我所说的那个?)字符串现在在这行中的第二个逗号之后......

date_stamp,IP_address,or71q238hdekb6gbq27ge56fz

但是我需要保留前3个令牌(上面的所有部分),然后简单地将解码后的字符串作为第4个令牌添加到这个... date_stamp,IP_地址,or71q238hdekb6gbq27ge56fz,This_is_the_decoded_string

我认为这真的不可能,而且我实际上必须将整行重写到输出文件中,但我对如何完成此操作感到迷茫......嵌套的FOR操作?

这是原始流程,当它只是每行上的字符串时才起作用......

for /F "tokens=*" %%A in (inputfile.csv) do "%cd%\decode.exe" %%A >> "%cd%\outputfile.csv"

现在我需要一些更像......

的东西
for /F "tokens=1,2,3 delims=," %%A in (inputfile.csv) do "%cd%\decode.exe" %%C >> "%cd%\outputfile.csv"

...但似乎没有输出所有4个令牌。

更新:新尝试...

for /F "tokens=1,2,3 delims=," %%A in (inputfile.csv) do (
   set date=%%A
   set ip=%%B
   set code=%%C
   FOR /F "tokens=3 delims=," %%D in ("%cd%\decode.exe %%D") do set decode=%%D
   set newline=%date%,%ip%,%code%,%decode%
   ECHO %newline% >> "%cd%\output.csv"
)

...但我得到的是@ECHO OFF在output.csv中重复

1 个答案:

答案 0 :(得分:1)

但您需要添加"tokens=1,2,3 delims=,"

Tokens=1,2,3表示分配%% A,%% B和%% C Delims=,意味着逗号。

 date_stamp,IP_address,or71q238hdekb6gbq27ge56fz

%%A将有date_stamp %%B将拥有IP_address %%C会有你的钥匙。

请参阅for /?

VBScript很简单

Set WshShell = WScript.CreateObject("WScript.Shell")
Set Inp = WScript.StdIn
Set Out = WScript.StdOut

Do Until Inp.AtEndOfStream
    y = Inp.ReadLine
    MyArray=Split(y, ",")
    Set wmic = WshShell.Exec("cmd /c echo " & MyArray(2))

    Do While wmic.Status = 0
        WScript.Sleep 100
    Loop

    Decoded = Replace(wmic.StdOut.ReadAll, vbcrlf, "")

    Out.WriteLine MyArray(0) & "," &  MyArray(1) & "," & decoded & "," & MyArray(2)
Loop

请注意,您必须使用CScript启动VBScript而不是默认的wscript。

cscript //nologo "C:\Users\User\Desktop\Exec WMIC.vbs" <"C:\Users\User\Desktop\inputfile.csv"

并返回

date_stamp,IP_address,or71q238hdekb6gbq27ge56fz,or71q238hdekb6gbq27ge56fz

将命令从echo更改为decode。