Windows 批处理文件";:“此时出人意料”;

Windows 批处理文件";:“此时出人意料”;,windows,batch-file,command-line,scripting,batch-processing,Windows,Batch File,Command Line,Scripting,Batch Processing,以下代码行是较大脚本的一部分。虽然这是运行时产生问题的特定部分。在初始提示和用户输入后,脚本会出现错误,此时出现意外错误。在看了我的代码和一些在线文档之后,看起来我所做的一切都应该是正确的。虽然我确信我遗漏了一些导致这种情况发生的小事情 ::Changes Date/Time echo The current date and time is %date% %time% SET /P TIMECHANGE=Would you like to change the time (y:Yes): i

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

::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
在代码块(括号内的行序列)中输入变量和使用新值似乎不会改变值的原因

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

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

问题是由带有
(…):
文本的
设置/p
行引起的。使用引号如下,它将起作用
SET/P“VAR=TEXT:”


哪一行?刚刚运行了一个测试,它位于以下行:if/i“%TIMECHANGE%”=“y”(我怀疑问题可能是此代码本身作为代码块的一部分封闭,其中
用作
set
语句的一部分将关闭括号级别。尝试将
集合中的
替换为
^)
是,似乎已解决问题。非常感谢你在这方面的帮助。关于这个解决方案有几个问题。将整个提示符用引号括起来是否相同?我还应该转义(也是吗?这直接发生在if语句中。我甚至无法到达设置%POSTIME%的行
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):"