【发布时间】:2022-07-22 23:01:56
【问题描述】:
这是我第一次使用批处理文件。我正在尝试从原始 csv 和管道输出中提取某些列到新的 csv。以下代码是我根据这个链接写的:
https://stackoverflow.com/a/17557532/16034206
@echo off
setlocal EnableDelayedExpansion
Rem for /f "skip=1 usebackq tokens=1,2,10,11 delims=," %%i in (sample.csv) do @echo %%i,%%j,%%k,%%l >>output.csv
echo "Your script is starting..."
FOR /F "skip=1 usebackq delims=" %%L in (sample.csv) DO (
set "line=%%L,,,,,,,,"
set "line=#!line:,=,#!"
FOR /F "tokens=1,2,10,11 delims=," %%a in ("!line!") DO (
set "param1=%%a"
set "param2=%%b"
set "param10=%%c"
set "param11=%%d"
set "param1=!param1:~1!"
set "param2=!param2:~1!"
set "param10=!param10:~1!"
set "param11=!param11:~1!"
if "%%~A"=="RH" echo !param1!, !param2!, !param10!, !param11! >> output.csv
)
)
echo "Your script has completed"
我希望应用逻辑来检查 param1 是否包含子字符串“@gmail.com”并且 param10 在将特定的 4 列行输出到 csv 之前以特定字符串“100”开头。
我从这个链接检查了如何使用 if 语句:https://stackoverflow.com/a/17474377/10671013 但我没有找到任何关于 SO 讨论“包含子字符串”或检查“以字符串开头”的链接。请指教。
【问题讨论】:
-
if not "!param1:@gmail.com=! == "!param1!" if "!param10:~0,3!" == "100" echo ...(顺便说一句:你使用%%~A,但没有%%~A(for变量区分大小写)) -
哦,我还没有为新逻辑更改它。我一直在试图找到相关的代码。非常感谢,我马上试试!
-
我是否将它添加到内部 for 循环的末尾?我收到
3!" == "100" echo !param1!, !param2!, !param10!, !param11! >> output.csv was unexpected at this time.错误 -
糟糕 - 我错过了第一个
if中的引用 -
哈哈,有一阵子我以为它不起作用,因为没有输出,但事实证明我指定了错误的列。非常感谢!如果您不介意将其发布为 ans 以便我接受?
标签: csv for-loop batch-file cmd