批处理文件“:此时意外”

Batch File ": unexpected at this time"

以下代码行是更大脚本的一部分。虽然这是在 运行 时产生问题的特定部分。在初始提示和用户输入后,脚本会出错并提供错误 : unexpected at this time。在查看了我的代码和一些在线文档之后,看起来我所做的一切都应该是正确的。虽然我确定我遗漏了导致这种情况发生的一些小问题。

::Changes Date/Time
echo The current date and time is %date% %time%
SET /P TIMECHANGE=Would you like to change the time (y:Yes):

if /i "%TIMECHANGE%" == "y" (
    SET /P POSTIME=Please enter new time (HH:MM:SS):
    time "%POSTIME%"
)

SET /P DATECHANGE=Would you like to change the date (y:Yes):

if /i "%DATECHANGE%" == "y" (
    SET /P POSDATE=Please enter new date (MM-DD-YYYY):
    date "%POSDATE%"
)

tzutil /s "Eastern Standard Time"

编辑:
通过更多的探索,我发现问题发生在线路上:

if /i "%TIMECHANGE%" == "y" (

请参阅 SO 中的 delayedexpansion 条目(有很多)以解释为什么 set 设置变量并在代码块(带括号的行序列)中使用新值的原因'似乎没有更改值。

然而,这里的简单解决方案是将 timedate 设置行移到 if 语句之外,例如

set "postime=%time%"
if /i "%TIMECHANGE%" == "y" (
    SET /P POSTIME=Please enter new time (HH:MM:SS):
)
time "%POSTIME%"

问题是由带有 (...): 文本的 SET /P 行引起的。如下使用引号,它将起作用 SET /P "VAR=TEXT:":

SET /P "TIMECHANGE=Would you like to change the time (y:Yes):"

SET /P "POSTIME=Please enter new time (HH:MM:SS):"

SET /P "DATECHANGE=Would you like to change the date (y:Yes):"

SET /P "POSDATE=Please enter new date (MM-DD-YYYY):"