簡體   English   中英

雙引號不會在循環中轉義

[英]Double quotes are not being escaped in a loop

我有一個 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

我已經寫了一個循環到 go 到每一行然后發現那里是否有雙引號。 我能夠遍歷每一行,但沒有找到雙引號。 我也嘗試過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
)

請幫忙!

find命令期望第二個參數是文件路徑而不是文字字符串,因此您不能執行find """" !line! 在由!line!表示的字符串中查找文字" 。要搜索字符串,您必須使用pipe ( | )

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

文字" by ""的 escaping 是正確的,但這是專門針對find命令的。


無論如何,可能沒有必要將find與 pipe 一起使用,這非常慢並且在涉及特殊字符時可能會很麻煩。 由於應根據CSV 格式規范引用包含逗號或引號的字段,因此您可以只處理周圍的引號,如下例所示。

如果沒有字段為空白(因此沒有出現相鄰, )並且在第 7 個包含,的字段之前沒有(引用的)字段,則設置for /F循環tokensdelims選項以獲取第七個字段。 然后您可以使用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
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM