错误:“|”此时出乎意料的批处理脚本

Posted

技术标签:

【中文标题】错误:“|”此时出乎意料的批处理脚本【英文标题】:Error: "|" was unexpected at this time batch script 【发布时间】:2014-01-17 11:04:40 【问题描述】:

当我运行这个脚本时,我会收到

|在这个时候是出乎意料的。

这是代码:

@ECHO Off

REM Mapeo de unidad U, path de usuario

    net use u: \\server\usuarios\%username%
pause
REM  ***** Description group ****

for /f %%i in ('net user %username% /domain | find /i /c Group') do set RESULT=%%i

echo %RESULT%

pause   

for 语句中,i 使用"',但我仍然有错误。

【问题讨论】:

【参考方案1】:

您需要转义 for 命令中的管道字符。应该是^|

【讨论】:

【参考方案2】:

for 中的条件必须先由批处理解析器解析,然后才能将其作为可执行命令传递给 IN() 子句,并且由于管道是 DOS 中的特殊字符,因此您需要使用转义字符( ^) 之前的管道,以在初始批量解析期间保留它,如下所示:

for /f %%i in ('net user %username% /domain ^| find /i /c Group') do set RESULT=%%i

【讨论】:

for 命令行被读取时,解析器会找到一个没有包含在引号字符串中的管道字符。在这种情况下,解析器解释存在管道创建请求,并且for 命令行被分成两部分以创建指示的管道。但这不是这种情况下需要的,管道不是for 命令的一部分。管道位于将生成将由for /f 命令读取的输出的命令中。为了向解析器发出信号,管道字符被转义。这样,解析器就不会尝试在管道字符处拆分for 命令行。

以上是关于错误:“|”此时出乎意料的批处理脚本的主要内容,如果未能解决你的问题,请参考以下文章

批处理文件:(此时出乎意料

(stderr) =256m""=="" 此时在 Pentaho Shell 脚本中出乎意料

奇怪的IncrediBuild错误:Files Java jre1.8.0_161 bin“”==“”此时出乎意料

“(在此时出现意外”是从Powershell运行批处理文件时)

Windows批处理脚本陷入死循环问题

在带有 %var% 的 IF 命令行上出现“(此时意外。”的原因是啥?