簡體   English   中英

使用echo | set / p =時,在變量中轉義雙引號

[英]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.

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