batch file“:此时出乎意料”

以下几行代码是较大脚本的一部分。 虽然这是运行时创build问题的特定部分。 在初始提示和用户input之后,脚本错误地提供错误: 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" ( 

该问题是由(...):文本的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):" 

请参阅SO中的delayedexpansion条目(有很多)来解释为什么set变量并使用代码块(括号中的行序列)中的新值不会改变该值。

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

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