从批处理脚本行“如果存在[文件](...

sw.*_*r97 2 if-statement batch-file special-characters

相关代码如下所示:

cd /d %~dp0

if exist filename.txt (
    echo %date% %time% *** text... >> filename2.txt
    echo ==============================
    echo ===  text.......           ===
    echo ===  text.......           ===
    echo ===  text....... (text...) ===
    echo ===  text (text... 
    echo ===  text...).
    :loop
        set /p "varx= text: "
    if "%varx%" neq "xxxx" goto loop

 ... more script...

)
Run Code Online (Sandbox Code Playgroud)

到处寻找解决方案......

问题是,这已经工作了很长一段时间......然后我改变了我认为是一些无害的东西,无法弄清楚问题出在哪里......

这么一个晦涩难懂的问题需要解决..呃!

sw.*_*r97 5

嗯...我将其发布为问答...因为我解决了自己的问题(我花了几天的尝试和错误来缩小范围并解决问题)。我希望这也能帮助一些可怜的灵魂,让他们免去很多心痛和几根头发……

最让我思考的是关于If 语句内循环处理不当的第二个要点……但这不是真正的原因,而是类似的原因……

事实证明,问题出在 ECHO 行上使用“('和/或')' ......

我认为这无害...我在很多地方都在 ECHO 行中使用了括号,这些行距离生成错误消息的位置大约有 10-15 行,所以我自然不认为这是来源。

但事实证明,即使在 ECHO 行上,如果在If 语句块中使用“(”或“)”,解释器显然也不喜欢使用它们。在这种情况下,它仍然必须将它们视为特殊字符......它显然不会忽略它们......

解决方案:

要么从上面 3 行中取出“(”和“)”,要么简单地 REM 这些行解决了问题,错误消息消失了……一切终于好了……

顺便说一句,类似的事情也可能适用于 FOR 语句(我隐约记得读过一些关于 FOR 行为也很奇怪的内容)。

因此值得深思。