【发布时间】:2019-11-27 09:14:55
【问题描述】:
我有一个批处理脚本可以在不同的环境下运行不同的PHP版本。
@ECHO OFF
setlocal EnableExtensions EnableDelayedExpansion
IF "%ANSICON%" == "" (
php7 %*
) ELSE (
php5 %*
)
问题在于它在第一个未转义的右括号处中断,因为它与 IF "%ANSICON%" == "" ( 中的左括号匹配。
C:\>php -r echo'()';
' was unexpected at this time.
C:\>php -r echo'(())';
)' was unexpected at this time.
setlocal EnableExtensions EnableDelayedExpansion 行是基于我阅读的其他问题的新行,但它根本没有改变行为。
我怎样才能将所有的%* 传递给 PHP 而不先被批处理解释?
此批处理文件表现出相同的行为:
@ECHO OFF
setlocal EnableExtensions EnableDelayedExpansion
IF "%ANSICON%" == "" (
echo %*
) ELSE (
echo %*
)
【问题讨论】:
标签: batch-file escaping delayedvariableexpansion