批处理第三个标记,然后将输出作为第四个标记附加到该行

Batch to process the 3rd token and then append output as 4th token to the line

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

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

or71q238hdekb6gbq27ge56fz

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

date_stamp,IP_address,or71q238hdekb6gbq27ge56fz

但我需要保留前 3 个标记(以上所有部分),然后像这样简单地将解码后的字符串附加为第 4 个标记... date_stamp,IP_address,或71q238hdekb6gbq27ge56fz,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

中重复

但是你需要加上"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 而不是默认的 wscript 来启动 VBScript。

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

和returns

date_stamp,IP_address,or71q238hdekb6gbq27ge56fz,or71q238hdekb6gbq27ge56fz

将命令从 echo 更改为 decode。