2017-08-16 63 views
1

以下代码行是较大脚本的一部分。尽管这是运行时创建问题的特定部分。在初始提示和用户输入后,脚本发生错误,提供错误: 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" (
+0

哪条特定行? – jmoon

+0

只是跑了一个测试,它是在线: 如果/我“%TIMECHANGE%”==“Y”( – TGutmann87

+1

我怀疑问题可能是这个代码本身被封闭作为代码块的一部分,其中用作'set'语句一部分的'''将关闭括号级别。尝试用'^)替换set中的'''' – Magoo

回答

0

的问题是由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):" 
1

见SO delayedexpansion项(有很多)对于为什么set解释创建一个变量并在代码块(括号中的行序列)内使用新值不会改变该值。

这里简单的解决方法就是不过来移动if报表之外timedate -setting线,如

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

这直接发生在if语句中,我甚至无法到达设置%POSTIME% – TGutmann87