我有一个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
我写了一个循环去到每一行 然后找到是否有任何双引号。我可以循环到每一行,但是没有找到双引号。我试过用 find
和 findstr
命令也是。我试过用 \
, ^
和 "
作为双引号的转义字符,但没有任何效果。以下是我的代码(用双引号作为转义字符)。
@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
)
请帮助我!
列表中的 find
指挥 希望第二个参数是一个文件路径,而不是一个字符串,所以你不能使用 find """" !line!
寻绎 "
所代表的字符串中 !line!
. 要搜索一个字符串,你将不得不使用一个 管道(|
):
echo(!line!| find """" && (echo Found quotes.) || (echo No quotes found.)
逃亡的字面意义 "
由 ""
虽然是正确的,但这是专门针对的。find
命令。
总之,可能没有必要使用 find
与管道,这是很慢的,而且在涉及到特殊字符时可能会很麻烦。由于包含逗号或引号的字段应该按照以下方式引用 CSV格式规范你可以像下面的例子一样,只需处理周围的引号。
如果没有字段是空白的(所以没有相邻的 ,
出现),并且在第7个字段之前没有包含以下内容的(引号)字段 ,
,设置 tokens
和 delims
的选择 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
)