是否可以在不向输出添加引号的情况下回显包含 FOR/IF 语句中带空格的路径的字符串?
Is it possible to echo a string including path with spaces within FOR/IF statement without adding quotes to the output?
如果你执行这个:
if "true" == "true" (
echo Path is C:\Program Files (x86)\MyFolder
)
你会得到一个错误:
\MyFolder was unexpected at this time.
如果将路径作为变量传递给 echo,这也是一样的。
有一个解决方案。这可以通过用双引号(或只是路径本身)将 echo 的文本括起来来解决。
然而,这会在输出文本中添加双引号:
Path is "C:\Program Files (x86)\MyFolder"
有没有办法在不改变输出的情况下处理这种情况?
正如 @compo 的评论中所述,右括号导致了问题,因为系统认为它是您之前左括号的右括号。因此,您需要转义括号 ^)
但是 正如您所说,当您的输出结果未知时,这对您没有帮助,但是我确实理解为什么引用的路径在输出中有问题。但无论如何,因此您需要解决这个问题,这里有一些方法,具体取决于您的实际脚本布局。
第一个选项,不要使用带括号的 if
代码块:
if "true" == "true" echo path is %ProgramFiles(x86)%\MyFolder
然而,上述方法不允许您执行其他语句,您需要多个 if
语句。
另一个更好的选择是在匹配时简单地设置变量。根据您的代码块,这些可能需要 delayedexpansion
if "true" == "true" (
set "mypath=%ProgramFiles(x86)%\MyPath"
) else (
set "mypath=%ProgramFiles(x86)%\AnotherPath"
)
echo %mypath%
要回显包含特殊字符的任意文本,您可以将文本分配给一个变量,然后在回显时应用 delayed variable expansion:
set "EchoPath=C:\Program Files (x86)\MyFolder"
setlocal EnableDelayedExpansion
if "true" == "true" (
echo(!EchoPath!
)
endlocal
setlocal
command enables delayed expansion here, the exclamation marks around the variable actually use it. The endlocal
command结束延迟扩容。请注意,自 setlocal
以来对变量 EchoPath
的任何更改都会在 endlocal
.
之后丢失
这里使用看起来很奇怪的语法 echo(
来避免某些字符串如 on
和 off
(它们是特殊关键字)或 [=19 这样的字符串出现问题=],所有这些理论上都可以存储在变量中。另请参阅以下主题:
- Echo a blank (empty) line to the console from a Windows batch file
- How can I echo a newline in a batch file?
如果你执行这个:
if "true" == "true" (
echo Path is C:\Program Files (x86)\MyFolder
)
你会得到一个错误:
\MyFolder was unexpected at this time.
如果将路径作为变量传递给 echo,这也是一样的。
有一个解决方案。这可以通过用双引号(或只是路径本身)将 echo 的文本括起来来解决。
然而,这会在输出文本中添加双引号:
Path is "C:\Program Files (x86)\MyFolder"
有没有办法在不改变输出的情况下处理这种情况?
正如 @compo 的评论中所述,右括号导致了问题,因为系统认为它是您之前左括号的右括号。因此,您需要转义括号 ^)
但是 正如您所说,当您的输出结果未知时,这对您没有帮助,但是我确实理解为什么引用的路径在输出中有问题。但无论如何,因此您需要解决这个问题,这里有一些方法,具体取决于您的实际脚本布局。
第一个选项,不要使用带括号的 if
代码块:
if "true" == "true" echo path is %ProgramFiles(x86)%\MyFolder
然而,上述方法不允许您执行其他语句,您需要多个 if
语句。
另一个更好的选择是在匹配时简单地设置变量。根据您的代码块,这些可能需要 delayedexpansion
if "true" == "true" (
set "mypath=%ProgramFiles(x86)%\MyPath"
) else (
set "mypath=%ProgramFiles(x86)%\AnotherPath"
)
echo %mypath%
要回显包含特殊字符的任意文本,您可以将文本分配给一个变量,然后在回显时应用 delayed variable expansion:
set "EchoPath=C:\Program Files (x86)\MyFolder"
setlocal EnableDelayedExpansion
if "true" == "true" (
echo(!EchoPath!
)
endlocal
setlocal
command enables delayed expansion here, the exclamation marks around the variable actually use it. The endlocal
command结束延迟扩容。请注意,自 setlocal
以来对变量 EchoPath
的任何更改都会在 endlocal
.
这里使用看起来很奇怪的语法 echo(
来避免某些字符串如 on
和 off
(它们是特殊关键字)或 [=19 这样的字符串出现问题=],所有这些理论上都可以存储在变量中。另请参阅以下主题:
- Echo a blank (empty) line to the console from a Windows batch file
- How can I echo a newline in a batch file?