2017-03-17 79 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% 
)