2017-03-17 80 views
1

我正在处理一个应该很简单但实际存在问题的小脚本。 (我几天前开始学习命令提示符和批处理脚本x.x)。批处理脚本更改系统日期

我需要它时,执行时,将系统年更改为2010年,并再次执行时返回到正确的一年。 研究后,我想出了这个:

@echo off 

:: BatchGotAdmin 
:------------------------------------- 
REM --> Check for permissions 
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" 

REM --> If error flag set, we do not have admin. 
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges... 
    goto UACPrompt 
) else (goto gotAdmin) 

:UACPrompt 
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" 
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" 

    "%temp%\getadmin.vbs" 
    exit /B 

:gotAdmin 
    if exist "%temp%\getadmin.vbs" (del "%temp%\getadmin.vbs") 
    pushd "%CD%" 
    CD /D "%~dp0" 
:-------------------------------------- 

SETX DAY "%Date:~0,2%" /M 
SETX MONTH "%Date:~3,2%" /M 
SETX YEAR "%DATE:~-4%" /M 


IF NOT "%year%"=="2010" (
    SETX CPS_YEAR "%year%" /M 
    date %day%-%month%-2010 
) ELSE (
    date %day%-%month%-%cps_year% 
) 

,第一部分是一个脚本,我发现(https://sites.google.com/site/eneerge/scripts/batchgotadmin),要求管理员权限来处理系统变量,这个问题是在我的逻辑。

这是一种工作,但一旦更改一年后,需要执行两次才能更改。并再次两次改变。

任何可能导致此问题的线索?

非常感谢!

+1

为什么使用'SETX'?使用SETX创建的变量在脚本运行期间不可用。请参阅帮助文件的注释2。只需使用SET命令来创建您的变量。 – Squashman

+0

是否有另一种方法来存储脚本运行后继续存在的变量?因为我需要它将当前年份存储在变量中,将系统日期更改为2010年,然后再次执行时将其更改回来。 (对不起,延迟回复) 编辑:暂时,我在代码里面粘贴了2次代码......它有效,但我对自己感觉不好哈哈哈) – Cirelli

回答

0

经过思考和“优化”代码,它现在正常工作。 我必须使用SETX变量,因为我需要在其上存储当前年份,所以当我再次执行脚本时,我可以访问该值并将年份更改回原始值。

IF NOT "%DATE:~-4%"=="2010" (
    SETX CPS_YEAR "%DATE:~-4%" /M 
    date %Date:~0,2%-%Date:~3,2%-2010 
) ELSE (
    date %Date:~0,2%-%Date:~3,2%-%CPS_YEAR% 
)