![](/img/trans.png)
[英]Passing Multiple Arguments in a Batch FOR loop using Double Quotes?
[英]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 到每一行然后發現那里是否有雙引號。 我能夠遍歷每一行,但沒有找到雙引號。 我也嘗試過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!
表示的字符串中查找文字"
。要搜索字符串,您必須使用pipe ( |
) :
echo(!line!| find """" && (echo Found quotes.) || (echo No quotes found.)
文字"
by ""
的 escaping 是正確的,但這是專門針對find
命令的。
無論如何,可能沒有必要將find
與 pipe 一起使用,這非常慢並且在涉及特殊字符時可能會很麻煩。 由於應根據CSV 格式規范引用包含逗號或引號的字段,因此您可以只處理周圍的引號,如下例所示。
如果沒有字段為空白(因此沒有出現相鄰,
)並且在第 7 個包含,
的字段之前沒有(引用的)字段,則設置for /F
循環的tokens
和delims
選項以獲取第七個字段。 然后您可以使用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.