双引号不能在循环中被转义。

问题描述 投票:0回答:1

我有一个csv文件(即 test.csv),我必须找到该文件中的双引号字符串。这些双引号字符串需要在某一列(即第7列)中找到。以下是该文件的内容。

Company,Project Code,Level 1,New Level 2,New Level 3,Task Number,Level 4 Description,Year,Period,Currency,Cost
WHITE ENGINEERING AND TECHNOLOGY,123456,A,A- AB,A-AB-ABC,A-AB-ABC-XYZ,"Hello , World",2020,February,AAA,9900000
WHITE ENGINEERING AND TECHNOLOGY,123456,A,A- AB,A-AB-ABC,A-AB-ABC-XYZ,"My , World",2020,February,AAA,9900001
WHITE ENGINEERING AND TECHNOLOGY,123456,A,A- AB,A-AB-ABC,A-AB-ABC-XYZ,"Your , World",2020,February,AAA,9900002

我写了一个循环去到每一行 然后找到是否有任何双引号。我可以循环到每一行,但是没有找到双引号。我试过用 findfindstr 命令也是。我试过用 \, ^" 作为双引号的转义字符,但没有任何效果。以下是我的代码(用双引号作为转义字符)。

@echo off
setLocal EnableDelayedExpansion

FOR /F "tokens=* delims=" %%a IN (test.csv) DO (
    set line=%%a
    echo !line!
    find """" !line! && (
                echo "Double quotes found"
                ) || (
                echo "Double quotes not found"
                )
    pause
)

请帮助我!

batch-file escaping double quotes
1个回答
0
投票

列表中的 find 指挥 希望第二个参数是一个文件路径,而不是一个字符串,所以你不能使用 find """" !line! 寻绎 " 所代表的字符串中 !line!. 要搜索一个字符串,你将不得不使用一个 管道(|):

echo(!line!| find """" && (echo Found quotes.) || (echo No quotes found.)

逃亡的字面意义 """ 虽然是正确的,但这是专门针对的。find 命令。


总之,可能没有必要使用 find 与管道,这是很慢的,而且在涉及到特殊字符时可能会很麻烦。由于包含逗号或引号的字段应该按照以下方式引用 CSV格式规范你可以像下面的例子一样,只需处理周围的引号。

如果没有字段是空白的(所以没有相邻的 , 出现),并且在第7个字段之前没有包含以下内容的(引号)字段 ,,设置 tokensdelims 的选择 for /F 以获得第七个字段。然后你可以利用 ~-修改器for 元变量,以去除周围或前导变量。" 并将结果与普通元变量进行比较。

@echo off
for /F "usebackq tokens=7 delims=, eol=," %%a in ("test.csv") do (
    if not "%%~a"=="%%a" echo The 7th field is quoted: %%a
)
© www.soinside.com 2019 - 2024. All rights reserved.