"if exists" 中的 echo 在 windows 命令提示符中是否总是需要双引号?
Does echo inside "if exists" always requires double quotes in windows command prompt?
我正在尝试查找文件的存在,然后在命令提示符下打印出如下目录:
C:\> if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files(x86)\Microsoft Visual Studio 14.0\)
失败并出现以下错误:
\Microsoft was unexpected at this time.
如果我将命令重写为
C:\> if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo "C:\Program Files(x86)\Microsoft Visual Studio 14.0\")
这会打印:
"C:\Program Files(x86)\Microsoft Visual Studio 14.0\"
我使用了这个命令的输出,它周围的引号引起了一些问题。有什么方法可以在不添加引号的情况下回应吗?
问题是 echo
部分的括号, (x86)
中的右 )
被认为是 [= 前面的左 (
的对应部分17=].
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files(x86)\Microsoft Visual Studio 14.0\)
rem // ^ ^
rem // +opening-----------closing+
所以你有两个选择:
要么删除整个 echo
命令行周围的 (
/)
:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" echo C:\Program Files(x86)\Microsoft Visual Studio 14.0\
或转义(x86)
中的括号,如:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files^(x86^)\Microsoft Visual Studio 14.0\)
或:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files(x86^)\Microsoft Visual Studio 14.0\)
条件命令部分的括号不是必需的,除非:
您要构建多行块:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (
echo C:\Program Files^(x86^)\Microsoft Visual Studio 14.0\
)
或者您想使用 else
子句:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files^(x86^)\Microsoft Visual Studio 14.0\) else echo ERROR: file not found!
或以上的组合:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (
echo C:\Program Files^(x86^)\Microsoft Visual Studio 14.0\
) else (
echo ERROR: file not found!
)
有关更多信息,请参阅:IF
。
最多的点已经在aschipfl的回答中解释过了
但通常你不能或不想转义括号,因为你正在使用 unknown 内容的变量,如 %ProgramFiles%
.
当你想在不带引号和不转义的情况下回显它们时,你可以使用延迟扩展。
setlocal EnableDelayedExpansion
set "dir=!ProgramFiles!"
if exist "!dir!" (
echo !dir!
)
我正在尝试查找文件的存在,然后在命令提示符下打印出如下目录:
C:\> if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files(x86)\Microsoft Visual Studio 14.0\)
失败并出现以下错误:
\Microsoft was unexpected at this time.
如果我将命令重写为
C:\> if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo "C:\Program Files(x86)\Microsoft Visual Studio 14.0\")
这会打印:
"C:\Program Files(x86)\Microsoft Visual Studio 14.0\"
我使用了这个命令的输出,它周围的引号引起了一些问题。有什么方法可以在不添加引号的情况下回应吗?
问题是 echo
部分的括号, (x86)
中的右 )
被认为是 [= 前面的左 (
的对应部分17=].
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files(x86)\Microsoft Visual Studio 14.0\)
rem // ^ ^
rem // +opening-----------closing+
所以你有两个选择:
要么删除整个
echo
命令行周围的(
/)
:if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" echo C:\Program Files(x86)\Microsoft Visual Studio 14.0\
或转义
(x86)
中的括号,如:if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files^(x86^)\Microsoft Visual Studio 14.0\)
或:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files(x86^)\Microsoft Visual Studio 14.0\)
条件命令部分的括号不是必需的,除非:
您要构建多行块:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" ( echo C:\Program Files^(x86^)\Microsoft Visual Studio 14.0\ )
或者您想使用
else
子句:if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files^(x86^)\Microsoft Visual Studio 14.0\) else echo ERROR: file not found!
或以上的组合:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" ( echo C:\Program Files^(x86^)\Microsoft Visual Studio 14.0\ ) else ( echo ERROR: file not found! )
有关更多信息,请参阅:IF
。
最多的点已经在aschipfl的回答中解释过了
但通常你不能或不想转义括号,因为你正在使用 unknown 内容的变量,如 %ProgramFiles%
.
当你想在不带引号和不转义的情况下回显它们时,你可以使用延迟扩展。
setlocal EnableDelayedExpansion
set "dir=!ProgramFiles!"
if exist "!dir!" (
echo !dir!
)