对于 /F findstr 设置值 CSV 的第二列

For /F findstr set value second column of CSV

我使用代码删除文件夹中包含保存在 CSV 文件中的一些单词的所有文件。

此代码读取我的 CSV 文件的每一行,并在搜索 CSV 中读取的每个单词后删除我们源中包含这些单词的文件。

现在我需要调整此代码以使用我的 CSV 的第二列中的类似值。

我的 list.csv 文件:

1,DRWORDAAA
2,ERWORDBBB
3,BCWORDCCC
99,ASWORDZZZ

我的批处理文件:

for /F "delims=" %%a in ('findstr /M /G:"D:\Program Files\list.csv" "D:\Program Files\myfolder\*.log"') do del "%%a"

我需要设置类似的值来搜索我的 CSV 的 2 列(在我的示例中,从 DRWORDAAAASWORDZZZ)。

我的 CSV 有数百行,要搜索的词可能不同,但结构始终相同。

实际上,批处理文件代码只读取 CSV 的第一列,不识别第二列。

虽然我已尝试解决您的问题,但我也利用了我上次给您的答复中的信息,因为它看起来实际上是同一个任务

搜索字符串文件不应该是列表以外的任何内容,即搜索字符串的单列,其中每个完整的行组成要匹配的字符串。因此,最简单的解决方法是重写 csv 文件以仅包含一个 'column'.

@Echo Off
If Not Exist "D:\Program Files\MyFolder\*.log" Exit /B
Set "ds="
For /F "Tokens=1-3 Delims=/ " %%A In ('RoboCopy /NJH /L "\|" Null'
) Do If Not Defined ds Set "ds=list_%%C-%%B-%%A.csv"
If Not Exist "%ds%" Exit /B
(   For /F "EOL=, Tokens=2 Delims=," %%A In ('Type "%ds%"'
    ) Do Echo(%%A)>"%Temp%\list.txt"
For /F "Tokens=*" %%A In ('FindStr /IMLG:"%Temp%\list.txt"^
 "D:\Program Files\MyFolder\*.log"') Do Del /A /F "%%A">Nul 2>&1
Del "%Temp%\list.txt"

这使用相同的方法,但没有创建、读取和删除持有文件。对于非常大的 csv 文件,我不推荐这种方法。

@Echo Off
If Not Exist "D:\Program Files\MyFolder\*.log" Exit /B
Set "ds="
For /F "Tokens=1-3Delims=/ " %%A In ('RoboCopy /NJH /L "\|" Null'
) Do If Not Defined ds Set "ds=list_%%C-%%B-%%A.csv"
If Not Exist "%ds%" Exit /B
For /F "EOL=, Skip=1 Tokens=2 Delims=," %%A In ('Type "%ds%"'
) Do For /F "Tokens=*" %%B In ('FindStr /IMLC:"%%A" "*.log"'
) Do Del /A /F "%%B">Nul 2>&1

备注:

  • 这是未经测试的。
  • 用于解析 csv 的方法,意味着只有在填充了第一个和第二个字段时才应使用此方法。
  • 上面的第一个示例期望 csv 文件没有 header,而第二个示例期望 header 和 Skip(只需根据需要删除或添加 Skip=1 您选择的任何方法。)
  • 以上示例使用 Type,如果您的源 csv 是 UTF,这可能会有所帮助。