我正在尝试修改输入文件格式已更改的批处理(由于我无法控制的情况)
该文件过去只包含带有字符串的行,我必须在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中重复
答案 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。