批处理第三个标记,然后将输出作为第四个标记附加到该行
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。
我正在尝试修改输入文件格式已更改的批处理(由于我无法控制的情况)
该文件过去只包含带有字符串的行,我必须 运行 作为 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。