gpt4 book ai didi

batch-file - 如何使用批处理脚本解析 csv 文件?

转载 作者:行者123 更新时间:2023-12-04 02:27:03 27 4
gpt4 key购买 nike

我对批处理文件很陌生。有人可以帮我编写一个批处理脚本来解析如下所示的 csv 文件:

"Expert Info (Chat/Sequence): GET /?password=Katy HTTP/1.1\r\n","Feb 20, 2014 19:34:46.571807000","b5:54:f4:v7:xo:6l"

"Expert Info (Chat/Sequence): GET /?password=Cory HTTP/1.1\r\n","Feb 20, 2014 19:34:51.671167000","b5:54:f4:v7:xo:6l"

"Expert Info (Chat/Sequence): GET /?password=Mike HTTP/1.1\r\n","Feb 20, 2014 19:34:57.145898000","b5:54:f4:v7:xo:6l"

并将其转换为另一个如下所示的 csv 文件:

"Katy", "2014-02-20", "19:34:46", "b5:54:f4:v7:xo:6l" 
"Cory", "2014-02-20", "19:34:51", "b5:54:f4:v7:xo:6l"
"Mike", "2014-02-20", "19:34:57", "b5:54:f4:v7:xo:6l"

这是我写的:

@echo off
FOR /F "tokens=6,8,9,10,11* delims=,? " %%a in (file.csv) do (

set pass=%%a
set month=%%b
set day=%%c
set year=%%d
set sec=%%e
set mac=%%f
echo "%%a" %%b %%c %%d %%e %%f

if %month:~1,10%==Jan set month=01
if %month:~1,10%==Feb set month=02
if %month:~1,10%==Mar set month=03
if %month:~1,10%==Apr set month=04
if %month:~1,10%==May set month=05
if %month:~1,10%==Jun set month=06
if %month:~1,10%==Jul set month=07
if %month:~1,10%==Aug set month=08
if %month:~1,10%==Sep set month=09
if %month:~1,10%==Oct set month=10
if %month:~1,10%==Nov set month=11
if %month:~1,10%==Dec set month=12

echo "%pass:~9,4%", "%year%-%month:~1,10%-%day%", "%sec:~,8%", %mac% >> text.csv)

最佳答案

@ECHO OFF
SETLOCAL
(
FOR /F "tokens=6,8,9,10,11* delims=,? " %%a in (q21921051.txt) do (
set pass=%%a
set month=%%b
set day=%%c
set year=%%d
set sec=%%e
set mac=%%f
CALL :CALC
)
)> text.csv
GOTO :EOF
:calc

if %month:~1,10%==Jan set month=01
if %month:~1,10%==Feb set month=02
if %month:~1,10%==Mar set month=03
if %month:~1,10%==Apr set month=04
if %month:~1,10%==May set month=05
if %month:~1,10%==Jun set month=06
if %month:~1,10%==Jul set month=07
if %month:~1,10%==Aug set month=08
if %month:~1,10%==Sep set month=09
if %month:~1,10%==Oct set month=10
if %month:~1,10%==Nov set month=11
if %month:~1,10%==Dec set month=12

echo "%pass:~9,4%", "%year%-%month%-%day%", "%sec:~,8%", %mac%

GOTO :eof

我使用名为 q21921051.txt 的文件进行测试。

快到了。您的主要问题是延迟扩展 - 在 block 语句(带括号的一系列语句)中,整个 block 被解析,然后 执行。 block 中的任何 %var% 都将被该变量的值替换在 block 被解析时 - 在 block 被执行之前。

因此,IF (something) else (somethingelse) 将在 IF 时使用 %variables% 的值执行遇到 - 同样的事情适用于 FOR ... DO (block)

克服这个问题的两种常见方法是 1) 使用 setlocal enabledelayedexpansion 并使用 !var! 代替 %var% 来访问var 的更改值或 2) 调用子例程以使用更改后的值执行进一步处理。

这里我用的是第二种方法

另请注意,(parenthesising the entire routine) 将使用重定向器重定向其所有输出 - 在本例中为 >text.csv . 如果您希望附加文件而不是重新创建文件,则 > 应该是 >>

我不确定对 %month:~1,10% 的痴迷是什么。 batch 中的子字符串从%var:~m,n% 中获取,其中,n 是可选的; m 是字符串开头的字符数,如果为负数则从末尾开始。 ,n positive = 返回的最大长度; negative = chars from end 的结束位置; missing=返回 m

之后的所有内容

因此,由于 %month% 将包含 "Feb,因此只需要 %month:~1% - 但我离开了你的原创。

关于batch-file - 如何使用批处理脚本解析 csv 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21921051/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com