Batchprogrammierung, if %date% größer als %Maxdate% erstellen?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

In Batch hast du neben "==" noch folgende Vergleichsoperatoren zur Verfügung:

    EQU - gleich
    NEQ - nicht gleich
    LSS - kleiner als
    LEQ - kleiner als oder gleich
    GTR - größer als
    GEQ - größer als oder gleich

Also um zwei Zahlen zu vergleichen:

set /a a = 5
set /a b = 7

if %a% leq %b% (
    echo a ist kleiner als oder gleich b
)

Beim Datum allerdings hast du das Problem, dass du meist keine Zahlen, sondern Strings in einem bestimmten Datumsformat vorliegen hast.

Das Datumsformat von %date% kann zudem auf unterschiedlichen Computern variieren. Darum ist es besser das Datum mit z.B. `wmic os get LocalDateTime /VALUE` abzufragen. Das speichern dieses Wertes kannst du mit for erledigen:

for /f "tokens=1,2 delims==" %%d in ('wmic os get LocalDateTime /VALUE') do (if "%%d" equ "LocalDateTime" set dt=%%e)

Da du dich beim Datum nur für die ersten 8 Stellen interessierst, kannst du den Rest abschneiden; Ich füge zudem gerne zwischen Jahr, Monat und Tag noch Striche "-" ein, damit das Datum besser lesbar ist:

set currentDate=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%

Mit `if` kannst du nun einen Stringvergleich mit einem anderen Datum (im selben Format) durchführen:

if "%currentDate%" gtr "%maxDate%" goto licenseExpired

Hier mal ein ganzes Beispielprogramm:

for /f "tokens=1,2 delims==" %%d in ('wmic os get LocalDateTime /VALUE') do (if "%%d" equ "LocalDateTime" set dt=%%e)
::  dateFormat:=   YYYY  -    MM   -   DD
set currentDate=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%
set maxDate=2020-05-10

if "%currentDate%" gtr "%maxDate%" goto licenseExpired

echo passed.
pause&exit

:licenseExpired
echo error. license expired.
pause&exit

Leon3612 
Beitragsersteller
 12.05.2020, 01:14

danke :D ein bat script kann man nicht unlesbar machen oder ?
Da ich ungerne möchte das man einfach das %maxdate% umstellen kann.

Würde ich es per Datenbank machen, könnte man ja die Daten rauslesen ^^.
Oder kann ich das über ein Web machen, wie z.B. bei Pastebin.
in C# habe ich das so gemacht :

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class gameversion : MonoBehaviour

{

  public string URL = "";

  public string CurVersion;

  string latestVersion;

  public GameObject newVersionAvailable;

  private void Start()

  {

    StartCoroutine(LoadTxtData(URL));

  }

  public void CheckVersion()

  {

    if(CurVersion != latestVersion)

    {

      newVersionAvailable.SetActive(true);

    }

    else

    {

      newVersionAvailable.SetActive(false);

    }

    Debug.Log("Cur Version: " + CurVersion + " Latest Version: " + latestVersion);

  }

  IEnumerator LoadTxtData(string url)

  {

    WWW www = new WWW(url);

    yield return www;

    latestVersion = www.text;

    CheckVersion();

  }

  public void OpenURL(string url)

  {

    Application.OpenURL(url);

  }

}

timlg07  13.05.2020, 16:57
@Leon3612
ein bat script kann man nicht unlesbar machen oder ?

Nein. Du kannst nah an Unlesbarkeit herankommen, indem du die Batch in einen .exe-Wrapper packst, den Code schwer lesbar machst und das Datum nicht allzu leicht verändern lässt. Allerdings erhöhst du damit nur den Zeitaufwand, die eine Person braucht, um die Batch zu "lesen"; unmöglich wird es nie werden.

Programmiere in VBS (Visual Basic Script)

Beispiel (also test.vbs abspeichern und doppeltklicken)

if NOW > CDate("11.05.2020") then

MsgBox "abgelaufen"

End if

um das zu testen setze dann statt 11.05. eben 08.05 usw ein. (es wird übrigens 00:00:00 Uhr genommen .. wenn du den ganzen tag haben willst müsstest du CDate("12.05.2020") oder CDate("11.05.2020 23:59:59") nehmen. Letzteres macht wegen einer Sekunde nicht soviel sinn.


iqKleinerDrache  09.05.2020, 16:26

das ganze in VBS umformulieren, dann hast du mehr Möglichkeiten.

du kannst auch ein cmd oder bat innerhalb eines VBS aufrufen. mit ShellExecute ... google danach.

timlg07  11.05.2020, 11:31
@iqKleinerDrache

Warum sollte er das ganze in vbs umformulieren, nur weil du dich da besser auskennst?

Leon3612 
Beitragsersteller
 09.05.2020, 16:25

DAS IST DER CODE

@echo off 

:Start 

color 0a 

title Hooker Script

cls

echo.

echo ===============================================================================

echo =                 SCRIPT MASTER                =

echo ===============================================================================

echo.

echo.

echo.

set Maxdate=10.05.2020

:KeyPass

set /p Name=Wie lautet Ihr Name? 

if %Name%==XXX goto Lizenz 

exit

:Lizenz

set /p Key=Lizenz:

if %Key%==XXX goto keytrue

echo Key is not registerd

echo.

echo.

goto KeyPass

:; ping -n 2 127.0.0.1>NUL

exit 

:keytrue 

if %date%==%Maxdate% goto invalidlicense 

...

:invalidlicense 

color 0b 

title %Name% %Key% %Date% Lizenz abgelaufen

echo:

echo:

echo Deine Lizenz ist abgelaufen am %Maxdate%.

echo Kontaktiere den Entwickler, wenn du Sie weiter nutzen möchtest.

echo:

echo:

pause 

exit