Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 是否可以在FOR/IF语句中回显包含path的字符串,而不在输出中添加引号?_Batch File_Echo - Fatal编程技术网

Batch file 是否可以在FOR/IF语句中回显包含path的字符串,而不在输出中添加引号?

Batch file 是否可以在FOR/IF语句中回显包含path的字符串,而不在输出中添加引号?,batch-file,echo,Batch File,Echo,如果执行此操作: 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)\MyF

如果执行此操作:

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"

有没有办法在不改变输出的情况下处理这种情况?

正如在的评论中所述,右括号导致了问题,因为系统认为这是前面的左括号的结束。因此,您需要转义括号
^)

然而正如您所说,当您有未知的输出结果时,这对您没有帮助,但是我确实理解了为什么引用的路径在输出中会出现问题。但是无论如何,因此您需要解决这个问题,下面是一些方法,具体取决于您实际的脚本布局

第一个选项,如果代码块:

if "true" == "true" echo path is %ProgramFiles(x86)%\MyFolder
但是,上述方法不允许您执行else语句,您需要多个
if
语句

另一个更好的选择是,如果存在匹配项,则只需设置变量。。根据您的代码块,这些可能需要
delayedexpansion

if "true" == "true" (
     set "mypath=%ProgramFiles(x86)%\MyPath"
   ) else (
     set "mypath=%ProgramFiles(x86)%\AnotherPath"
 )
echo %mypath%

正如在的评论中所述,右括号导致了问题,因为系统认为这是前面的左括号的结束。因此,您需要转义括号
^)

然而正如您所说,当您有未知的输出结果时,这对您没有帮助,但是我确实理解了为什么引用的路径在输出中会出现问题。但是无论如何,因此您需要解决这个问题,下面是一些方法,具体取决于您实际的脚本布局

第一个选项,如果代码块:

if "true" == "true" echo path is %ProgramFiles(x86)%\MyFolder
但是,上述方法不允许您执行else语句,您需要多个
if
语句

另一个更好的选择是,如果存在匹配项,则只需设置变量。。根据您的代码块,这些可能需要
delayedexpansion

if "true" == "true" (
     set "mypath=%ProgramFiles(x86)%\MyPath"
   ) else (
     set "mypath=%ProgramFiles(x86)%\AnotherPath"
 )
echo %mypath%

要回显包含特殊字符的任意文本,可以将文本指定给变量,然后在回显时应用:

设置“EchoPath=C:\Program Files(x86)\MyFolder”
setlocal EnableDelayedExpansion
如果“真”=“真”(
回声(!回声路径!
)
端部
此处启用延迟扩展,变量周围的感叹号实际使用它。结束延迟扩展。请注意,自
setlocal
以来对变量
EchoPath
所做的任何更改都会在
endlocal
之后丢失

此处使用奇数语法是为了避免某些字符串出现问题,如
on
off
(它们是特殊关键字),或
/?
之类的字符串,所有这些字符串理论上都可以存储在变量中。还可以参考以下线程:

要回显包含特殊字符的任意文本,可以将文本指定给变量,然后在回显时应用:

设置“EchoPath=C:\Program Files(x86)\MyFolder”
setlocal EnableDelayedExpansion
如果“真”=“真”(
回声(!回声路径!
)
端部
此处启用延迟扩展,变量周围的感叹号实际使用它。结束延迟扩展。请注意,自
setlocal
以来对变量
EchoPath
所做的任何更改都会在
endlocal
之后丢失

此处使用奇数语法是为了避免某些字符串出现问题,如
on
off
(它们是特殊关键字),或
/?
之类的字符串,所有这些字符串理论上都可以存储在变量中。还可以参考以下线程:


您需要防止任何内部右括号被读取为代码块的右括号。您可以使用标准转义字符,插入符号,
^
如果/I“true”==“true”(回显路径为C:\Program Files(x86^)\MyFolder)对该内部括号进行转义
@Compo,它很有效。谢谢!我想你可以把它移到anwer。不过,如果我回显一个意外的变量,它不会有帮助。@aschipfl我不认为他是作为解决方案添加的,他更多的是说,双引号路径的解决方案不是解决他的问题的方案,因为它还会在结果中添加双引号。:)同意,@GerhardBarnard,很抱歉阅读不够仔细…您需要防止任何内部右括号被读取为代码块的右括号。您可以使用标准转义字符插入符号对该内部括号进行转义,
^
如果/I“true”==“true”(回送路径为C:\Program Files(x86^)\MyFolder)
@Compo,它能用。谢谢!我想你可以把它移到anwer。不过,如果我回显一个意外的变量,它不会有帮助。@aschipfl我不认为他是把它作为解决方案添加的,他更多的是说双引号路径的解决方案不是解决他的问题的方案,因为它也会在结果中添加双引号。:)同意,@GerhardBarnard,抱歉没有仔细阅读…
奇怪的语法回音(
)。Windows批处理真的很神奇。
奇怪的语法回音(
。Windows批处理真的很神奇。大多数情况下都是很好的解决方案。大多数情况下都是很好的解决方案。