[英]escape double quotes in a variable when using echo|set /p=
echo|set /p=
可以輸出不帶換行符的變量。
我正在嘗試循環這樣的文本文件
for /f %%a in (zen.txt) do (
set var=%%a
echo !var!
echo|set /p=!var!
)
有些行只有一個"
,例如:
"he said...
echo
正確輸出上述行,而echo|set /p=
輸出。
使用echo|set /p=
時,是否可以在變量中轉義雙引號。
我們將需要為set/p
提供額外的報價以供使用。 您可以嘗試類似的操作(當然,無需創建測試文件)
@echo off
setlocal enableextensions disabledelayedexpansion
rem TESTING - Create a input file
>zen.txt (
echo "He said...
echo It was not me!
echo It was "the thing"!
echo ...
echo ^& it was all" ( The end )
)
for /f "delims=" %%a in (zen.txt) do (
<nul set /p="%%a "
)
echo|set /p
模擬返回鍵的按下以終止set/p
提示,但是它為管道的每一側創建了單獨的cmd
實例,從而使其變慢。 <nul
輸入重定向足以獲得相同的結果,但速度更快且資源使用較少。
set /p
在處理空格,引號和等號時有點討厭。
開頭或結尾的引號必須加倍,但要顯示引號時,表達式也應括在引號中。
要顯示單引號,請使用
<nul set /p ="""
set /p
似乎去除了一次外部引號。
您的代碼可以更改為<NUL set /p="!var!"
應該適用於普通文本以及引號。
如果文本以空格開頭,則將其刪除。 (但不是XP之前,在set /p "= Hello"
顯示空格)。
set /p
似乎使用了兩次引號刪除器。 首先是擴展集語法
<nul set /p "=hello" Text after the last quote will be dropped
但是對於內容,也會刪除外部引號<nul set /p ="hello" Text after the last quote will be dropped
甚至將兩者結合
<nul set /p "="hello" Text after the last inner quote will be dropped "
注意:我使用<nul set /p
,它要快得多,因為echo | set /p
echo | set /p
版本使用管道並產生兩個新的cmd.exe實例。 (已由MC ND提及)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.