2017-03-17 20 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回貼り付けました...それは動作しますが、自分自身について悪いと感じるhahaha) – 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% 
) 
関連する問題