目标:设置两个选项进行更改,然后根据哪个选项恢复日期。
背景:用于2005年过时的Windows p2p应用程序;该公司于2006年关闭。该版本可在限定时间内免费下载和使用。因此,日期需要在发布之前将其更改几秒钟。有一大群人使用这个程序。即:这是一个社区项目。
此项目的历史:一种技术(%BEFOREDATE%)适用于Win 2K到Windows 7.另一项技术(%CURDATE%)适用于Windows 8但不适用于早期版本。最近有人注意到第一种技术确实在他们的Win 8上工作但不是%CURDATE%,与我的Win 8相反。
我发现将日期还原到今天会产生某种错误,即使它成功将其发送到错误处理部分(错误处理程序退出进程。基本上与EXIT相同。)
当错误的选项运行时,程序/脚本就会挂起。
如何正确地编写这个,以便它处理任何一个选项,如果碰到那个不适合该特定系统的选项,它就不会挂起? 我不知道日期变化正确时会产生什么错误。
处理Win 8选项的部分代码:
:ver_8
SET BEFOREDATE=%date:~4,2%-%date:~7,2%-%date:~10,4%
FOR /F "TOKENS=1* DELIMS= " %%E IN ('DATE/T') DO SET CURDATE=%DATE%
DATE 07-01-05
@echo off
PING -n 5 127.0.0.1 > NUL 2>&1
@echo off
DATE %BEFOREDATE%
ping -invalid-arg || goto :ver_2
goto exit
:ver_2
DATE %CURDATE%
ping -invalid-arg || goto :error
goto exit
答案 0 :(得分:1)
早期的解决方案如下。
此解决方案并不聪明,但应该适用于大多数语言环境。具有不同日期格式的人可以在此下面复制另一行:
if not "%format:mm-dd-yy=%"=="%format%" set olddate=07-14-2005
并将mm-dd-yy更改为批处理文件在其不同语言环境中报告的内容以及与之匹配的静态日期格式。
@echo off
for /f "delims=" %%a in ('echo.^|date^|find /i "current"') do set "d8=%%a"
for /f "delims=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz: " %%a in ("%d8%") do set "d8=%%a"
for /f "delims=" %%a in ('echo.^|date^|find /i "Enter"') do set "format=%%a"
set olddate=
echo if this fails then add another line in the batch file and change the mm-dd-yy
echo to what you see at the at the end of this line below
echo %format% ^<---- here
if not "%format:dd-mm-yy=%"=="%format%" set olddate=14-07-2005
if not "%format:mm-dd-yy=%"=="%format%" set olddate=07-14-2005
:: to add a locale duplicate the line above and change the mm-dd-yy and static date as needed
date %olddate%
start "" "c:\folder\launch program.exe"
timeout /t 5 /nobreak
date %d8%
pause
以下原始解决方案:
这适用于Windows 8英语。
它将日期设置为当前日期xx05并启动程序并将日期重新设置为今天。
如果你想要2005年的静态日期然后改变date %d8:~0,-2%05
,但日期格式将是各种语言环境的一个因素 - 但是这个批处理文件确实希望年份成为日期字符串中的最后一位数。 / p>
@echo off
for /f "delims=" %%a in ('echo.^|date^|find /i "current"') do set "d8=%%a"
for /f "delims=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz: " %%a in ("%d8%") do set "d8=%%a"
date %d8:~0,-2%05
start "" "c:\folder\launch program.exe"
timeout /t 5 /nobreak
date %d8%
答案 1 :(得分:0)
如果您不是机器的“管理员”,则需要“以管理员身份运行”来设置日期。请注意,仅仅是管理员是不够的。
答案 2 :(得分:0)
这是以格式mm-dd-yyyy保存日期(请注意,某些版本的Windows Date命令采用mm-dd-yy格式)
SET BEFOREDATE=%date:~4,2%-%date:~7,2%-%date:~10,4%
尝试将此更改为
SET BEFOREDATE=%date:~4,2%-%date:~7,2%-%date:~12,2%
如果你只是将CurDate设置为Date,那么for循环的意义是什么?
FOR /F "TOKENS=1* DELIMS= " %%E IN ('DATE/T') DO SET CURDATE=%DATE%