【问题标题】:How to check column contains substring and another column starts with substring如何检查列是否包含子字符串并且另一列以子字符串开头
【发布时间】: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,但没有%%~Afor变量区分大小写))
  • 哦,我还没有为新逻辑更改它。我一直在试图找到相关的代码。非常感谢,我马上试试!
  • 我是否将它添加到内部 for 循环的末尾?我收到 3!" == "100" echo !param1!, !param2!, !param10!, !param11! >> output.csv was unexpected at this time. 错误
  • 糟糕 - 我错过了第一个 if 中的引用
  • 哈哈,有一阵子我以为它不起作用,因为没有输出,但事实证明我指定了错误的列。非常感谢!如果您不介意将其发布为 ans 以便我接受?

标签: csv for-loop batch-file cmd


【解决方案1】:

从第一列中删除你要查找的子字符串,并与原始字符串进行比较,如果不相等(字符串包含子字符串),检查另一列的前三个字符。 (此子字符串替换不区分大小写):

if not "!param1:@gmail.com=!" == "!param1!" if  "!param10:~0,3!" == "100" echo ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2015-07-27
    • 2011-11-09
    • 2013-05-18
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多