使用 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
模拟 return 按键以终止 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
版本使用管道并生成两个新的 cmd.exe 实例。 (MC ND已经提到)
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
模拟 return 按键以终止 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
版本使用管道并生成两个新的 cmd.exe 实例。 (MC ND已经提到)