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=
时是否可以在变量中转义双引号。
答案 0 :(得分:3)
我们将需要向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
输入重定向足以获得相同的结果,但速度更快且资源使用较少。
答案 1 :(得分:3)
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
版本使用管道并产生两个新的cmd.exe实例。 (已由MC ND提及)