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):"