Jochen: Batch Datei, Systemdatum ändern

Hallo,

mein Vorhaben ist, eine Batchdatei zu schreiben, dass mein Systemdatum auf ein bestimmtest Datum zurücksetzt, danach ein bestimmtes Programm startet.

@echo off
date 03.01.2017
start C:\Program Files\path\file.exe

Weder das Rücksetzen des Datums wird ausgeführt, noch startet das Programm, obwohl es in diesem Ordner als exe vorliegt.

Da ich in Sachen Batchprogrammierung völlig neu bin, frage ich mal ins Forum, was ich da falsch mache.

Und Zusatzfrage: Kann man in Batchdateien sowas wie einen Listener einfügen, der bei Beendigung des Programm automatisch die altuelle Systemzeit wiederherstellt?

Jochen

  1. Rufe das Progamm mit call damit es nach Programmende in die Batch zurückkehrt

    Und Zusatzfrage: Kann man in Batchdateien sowas wie einen Listener einfügen, der bei Beendigung des Programm automatisch die altuelle Systemzeit wiederherstellt?

    Das aktuelle Dtum musst Du speichern damit es wiederhergestellt werden kann.

    MFG

    1. Rufe das Progamm mit call damit es nach Programmende in die Batch zurückkehrt

      Und Zusatzfrage: Kann man in Batchdateien sowas wie einen Listener einfügen, der bei Beendigung des Programm automatisch die altuelle Systemzeit wiederherstellt?

      Das aktuelle Dtum musst Du speichern damit es wiederhergestellt werden kann.

      MFG

      Hallo pl,

      beides gute Ideen. Nur bisher läuft es ja nichtmal.

      Jochen

      1. Ok, dann wollen wir mal, Datei launch.bat oder launch.cmd

        date /t  > freezeddate.txt rem aktuelles Datum einfrieren
        date < date.txt            rem gewünschtes Datum setzen
        
        call "C:\Programme\TextPad 5\TextPad.exe"
        
        date < freezeddate.txt     rem aktuelles Datum wiederherstellen
        

        funktioniert ainwandfrei. MFG

        PS; in date.txt schreibst Du das Datum rein was Du haben willst. Die Uhrzeit bleibt wie sie ist.

        1. Hallo pl,

          Scripte wie deins waren unter Win XP schon deprecated, und seit Vista sind sie zumeist kaputt.

          1. REM kann man nicht hinter Befehle schreiben. Mehrzeilensyntax in Batches geht anders.
          2. DATE /T >file ist MS-DOS. Da gab es die %DATE% Variable noch nicht.
          3. Wenn Du schon eine Temp-Datei schreibst, dann bitte im %TEMP%-Ordner, und lösche sie zum Abschluss. Im Programme-Ordner schreibt man seit Vista nur noch, wenn man Software installiert. Für den Rest gibt's %TEMP% und %PROGRAMDATA%.
          4. Den Ordner C:\Programme gibt es seit Vista nicht mehr. Nicht im Dateisystem. Der Explorer faked ihn auf deutschen Windosen noch, aber im Filesystem ist es C:\Program Files bzw. C:\Program Files (x86). Und darauf zugreifen tut man mit %ProgramFiles% und %ProgramFiles(x86)%.

          Rolf

          --
          sumpsi - posui - clusi
          1. hi

            Scripte wie deins waren unter Win XP schon deprecated, und seit Vista sind sie zumeist kaputt.

            Es funktioniert einwandfrei.

            1. REM kann man nicht hinter Befehle schreiben. Mehrzeilensyntax in Batches geht anders.

            Du siehst doch daß ich das kann. Du kannst das natürlich auch weglassen.

            1. DATE /T >file ist MS-DOS. Da gab es die %DATE% Variable noch nicht.

            die Variable braucht man auch nicht. Und das Datum in eine Datei sichern, das macht der > womit die Ausgabe date /t umgelenkt wird.

            1. Wenn Du schon eine Temp-Datei schreibst, dann bitte im %TEMP%-Ordner, und lösche sie zum Abschluss.

            Löschen ist nicht notwendig. Die freeze'Datei wird sowieso wieder neu angelegt bzw Überschrieben.

            Im Übrigen ist der von mir gezeigte call Aufruf nur ein Beispielprogramm, was ich deswegen gewählt habe weil ein Leerzeichen im Pfad ist, um das mal zu zeigen.

            Die Pfade sind natürlich anzupassen. MFG

            1. Hallo pl,

              netter Versuch, dich rauszuquatschen. Aber du bist nur tiefer drin gelandet.

              Es funktioniert einwandfrei.

              Abgesehen von den Syntaxfehlern File Not Found Fehlern funktioniert es unter gewissen Voraussetzungen, ist aber nicht Windows-Regelkonform (das sind allerdings Regeln, die man eher als MSCE lernt (was ich nicht einmal bin)). Und es ist nicht einwandfrei, sonst hätte ich keine 4 Einwände gehabt.

              dann lass es weg

              Falsche Antwort. Korrekte Antwort wäre: Oh sorry, ich hab das einfach VHIG getippt und nicht getestet. Was ist so schwer an einem "Oops!"? - das passiert mir auch oft genug. Der TO hat gesagt dass er kein Batch Experte ist. Eine Vorlage mit Syntaxfehlern kann er nun wirklich nicht brauchen.

              die Variable braucht man auch nicht

              Doch natürlich. Die Datei braucht man nicht. Ich schreibe doch keine Temp-Datei, wenn ich eine Variable verwenden kann.

              Löschen ist nicht notwendig

              Ja, das stimmt. Das sieht der Rest der Welt auch so. Der Müll in meinem %TEMP% Ordner sprengt regelmäßig das Gigabyte-Limit. UND ICH HASSE ES

              Rolf

              --
              sumpsi - posui - clusi
              1. Hallo,

                Löschen ist nicht notwendig

                Ja, das stimmt. Das sieht der Rest der Welt auch so. Der Müll in meinem %TEMP% Ordner sprengt regelmäßig das Gigabyte-Limit. UND ICH HASSE ES

                ich auch. Und einer der großen TEMP-Sünder ist MS Outlook. Sobald du einen Anhang direkt aus der Mailnachricht öffnest (anstatt explizit erst irgendwo zu speichern), landet die Datei im %TEMP% und bleibt da, bis jemand von Hand hinterherräumt. *grmpf*

                Ciao,
                 Martin

                --
                Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
                1. Dieser Beitrag wurde gelöscht: Der Beitrag ist unkonstruktiv oder provokativ und trägt zu einer Verschlechterung der Stimmung bei.
              2. Abgesehen von den Syntaxfehlern

                Meine Batch hat keine Syntaxfehler. Nicht einen!

                MFG

              3. Hallo Rolf,

                VHIG getippt

                was ist denn das für eine Abkürzung? Bei der Suche nach einer Erklärung finde ich nur die Vanderbilt Healthcare Improvement Group in NL, und zwei bis drei Seiten weiter hinten im Google-Listing noch den schlüpfrigen Spruch von hinten ist geil.
                Wikipedia kennt VHIG auch nicht. Weder im Deutschen, noch im Englischen.

                Ciao,
                 Martin

                --
                Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
                1. Hallo Martin,

                  Vom Hirn Ins Gerät. Moderner: Naturagil und ohne vorher zu planen.

                  Ist das etwa eine Eigenerfindung von mir (der Begriff, nicht die Arbeitsweise)? Oder von meiner Chefin in den 90ern? Hmm.

                  Rolf

                  --
                  sumpsi - posui - clusi
                  1. Hallo,

                    VHIG: Vom Hirn Ins Gerät. Moderner: Naturagil und ohne vorher zu planen.

                    danke - wenn man's mal weiß, ist es naheliegend. :-)

                    Ist das etwa eine Eigenerfindung von mir (der Begriff, nicht die Arbeitsweise)? Oder von meiner Chefin in den 90ern? Hmm.

                    Zumindest scheint es nicht allgemein bekannt zu sein, sonst hätte ich doch eine plausible Deutung finden müssen ...

                    So long,
                     Martin

                    --
                    Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
                  2. Hello,

                    Hallo Martin,

                    Vom Hirn Ins Gerät. Moderner: Naturagil und ohne vorher zu planen.

                    Ist das etwa eine Eigenerfindung von mir (der Begriff, nicht die Arbeitsweise)? Oder von meiner Chefin in den 90ern? Hmm.

                    Wie? Deine Chefin ist schon über 90?

                    ☆☆Vknw☆☆

                    Glück Auf
                    Tom vom Berg

                    --
                    Es gibt nichts Gutes, außer man tut es!
                    Das Leben selbst ist der Sinn.
        2. Ergänzung und zum Verständnis

          date < date.txt ; gewünschtes Datum setzen
          

          Das Zeichen < leitet das was in date.txt notiert ist, auf das Kommando date um. Wenn es diese Umleitung nicht gäbe, würde date auf eine Eingabe warten.

          Im Übrigen ist es egal ob man rem vor einen Kommentar schreibt oder einfach ein anderes Zeichen. Man kann auch Zitrone davor schreiben oder gar nichts, solange der Kommentar nicht selbst ein Kommando ist.

          MFG

          1. Hallo pl,

            seufz

            @echo off
            PL Das ist ein Kommentar
            dir C:\
            

            Der Befehl "PL" ist entweder falsch geschrieben oder
            konnte nicht gefunden werden.

            CMD Kommentare beginnen mit REM oder mit ::. Und sie beginnen am Beginn der Zeile. Will man sie hinter eine Zeile stellen, braucht man Befehlsketten mit &. Das :: ist eigentlich ein Label mit Name : - aber es hat sich eingebürgert, sowas als Kommentar zu nutzen.

            @echo off
            REM Auflistung der Root-Verzeichnisse
            dir C:\   &REM Das ist ein Kommentar.
            dir D:\   &:: Das auch
            

            Rolf

            --
            sumpsi - posui - clusi
            1. seufz

              @echo off
              PL Das ist ein Kommentar
              dir C:\
              

              Der Befehl "PL" ist entweder falsch geschrieben oder
              konnte nicht gefunden werden.

              Korrekt! Deswegen wird er ja auch nicht ausgeführt.

              Kommentare dienen dem Verständnis! MFG

        3. Hallo pl,

          das funktioniert bestens.

          Danke für die Hilfe,

          Jochen

          1. Danke für Deine Rückmeldung! Hab schließlich selber mal sowas gebraucht um 1995 rum um die 21-Tage-Testversion Delphi auszutricksen 😉

            MFG

            1. Danke für Deine Rückmeldung! Hab schließlich selber mal sowas gebraucht um 1995 rum um die 21-Tage-Testversion Delphi auszutricksen 😉

              Aber, aber! Sooowas macht man doch nicht! :-D 😉

              Im Übrigen, ich finde es angenehm, die freeze_date-Datei im selben Ordner zu haben, wie die Batch selber. Es ist für mich interessant zu sehen, wann ich das Programm zuletzt genutzt habe.

              Gruß, Jochen

              1. Danke für Deine Rückmeldung! Hab schließlich selber mal sowas gebraucht um 1995 rum um die 21-Tage-Testversion Delphi auszutricksen 😉

                Aber, aber! Sooowas macht man doch nicht! :-D 😉

                Im Übrigen, ich finde es angenehm, die freeze_date-Datei im selben Ordner zu haben, wie die Batch selber. Es ist für mich interessant zu sehen, wann ich das Programm zuletzt genutzt habe.

                Ja, da kannste mal sehen was man mit ner Batchdatei alles machen kann. Mit einer Batchdatei konnte ich damals auch herausfinden wer sich an meinem PC angemeldet hat, incl. eines Hacks der Registry 😉

                MFG

  2. Hallo Jochen,

    wie startest du das cmd?

    Rolf

    --
    sumpsi - posui - clusi
    1. Hallo Jochen,

      wie startest du das cmd?

      Rolf

      Hallo Rolf,

      eigentlich gar nicht. Ich doppelklicke direkt die .bat-Datei.

      Jochen

      1. Hallo Jochen,

        ok dachte ich mir.

        1. benenne dass von .bat in .cmd um. Die Endung bat stammt aus MS DOS Zeiten

        2. das aktuelle Verzeichnis ist beim anklicken das Windows Systemverzeichnis, wenn ich nicht irre.

        Scratch that - es stimmt nicht. Zumindest unter Windows 7 ist der aktuelle Order der Script-Ordner.

        Also, einfach mal PAUSE an's Ende vom Script, damit man Zeit hat, eventuelle Fehlermeldungen zu lesen.

        Scratch that, too. Fehler ist klar.

        start C:\Program Files\path\file.exe
        

        sagt dem Computer: Starte das Programm "C:\Program" und übergebe ihm "Files\path\file.exe" als Parameter. Die Leerstelle trennt Programm und Parameter. Du musst Anführungszeichen verwenden.

        start "C:\Program Files\path\file.exe"
        

        reicht aber auch nicht, weil der START BEfehl nämlich einen ersten Parameter, der in Anführungszeichen steht, als Fenstertitel für das neue Programm interpretieren will.

        So ist's besser:

        start "" "C:\Program Files\path\file.exe"
        

        aber immer noch nicht KORREKT, weil man C:\Program Files nicht hartcodiert. Bist Du übrigens ganz sicher, dass es "Program Files" ist und nicht "Program Files (x86)"? Windows treibt da gerne mal neckische Scherze.

        Korrekt ist, statt C:\Program Files die Umgebungsvariable PROGRAMFILES zu verwenden.

        start "" "%PROGRAMFILES%\path\file.exe"
        

        Muss das Programm mit START gestartet werden? Weil - dann startet es asynchron (d.h. das Batchfile läuft sofort weiter), und ein Wiederherstellen der korrekten Zeit kommt möglicherweise zu früh.

        Das aktuelle Datum findest Du in der Umgebungsvariablen DATE. Du speicherst es mit

        SET datum=%DATE%
        

        und stellst es mit

        DATE %datum%
        

        wieder her.

        Aber wie gesagt - das ist so eine Sache mit der Asynchronität. Ggf. musst Du vor die Wiederherstellung einen PAUSE Befehl setzen, dann wartet das Batch darauf, dass jemand die Eingabetaste drückt und macht dann erst weiter.

        Rolf

        --
        sumpsi - posui - clusi
        1. Hallo Rolf,

          1. benenne dass von .bat in .cmd um. Die Endung bat stammt aus MS DOS Zeiten

          2. das aktuelle Verzeichnis ist beim anklicken das Windows Systemverzeichnis, wenn ich nicht irre.

          Aktuelles Verzeichnis ist das Home-Verzeichnis des Batch-Scriptes.

          Kann es sein, dass beim Programmaufruf Leerzeichen maskiert werden müssen?

          Jochen

          1. Hallo Jochen,

            Ja. Siehe oben, ich habe eine Menge editiert.

            Rolf

            --
            sumpsi - posui - clusi
            1. Hallo Jochen,

              Ja. Siehe oben, ich habe eine Menge editiert.

              Rolf

              ja, ist mir schon aufgefallen, ich hatte das Antwortfenster länger geöffnet, so hatte sich das überschnitten.

        2. Hallo Rolf,

          1. benenne dass von .bat in .cmd um. Die Endung bat stammt aus MS DOS Zeiten

          das stimmt zwar; es gibt aber meines Wissens keinen technischen Unterschied in der Behandlung.

          start "C:\Program Files\path\file.exe"
          

          reicht aber auch nicht, weil der START BEfehl nämlich einen ersten Parameter, der in Anführungszeichen steht, als Fenstertitel für das neue Programm interpretieren will.

          Ups. Das wusste ich noch nicht. Seit welcher Windows-Version ist das so? In Windows 5.x (also 2000 und XP) hätte die oben zitierte Version nämlich noch funktioniert.

          Ciao,
           Martin

          --
          Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
          1. Hallo Martin,

            start "C:\Program Files\path\file.exe"
            

            reicht aber auch nicht, weil der START BEfehl nämlich einen ersten Parameter, der in Anführungszeichen steht, als Fenstertitel für das neue Programm interpretieren will.

            Ups. Das wusste ich noch nicht. Seit welcher Windows-Version ist das so? In Windows 5.x (also 2000 und XP) hätte die oben zitierte Version nämlich noch funktioniert.

            Aber direktes Öffnen, also ohne "start" funktioniert heute mit Win7 immer noch. Mit "start" wird hingegen nichts geöffnet.

            Jochen

            1. Hallo Jochen,

              ok, welche Fehlermeldung kommt? Geht vielleicht ein kleines Konsolenfenster irgendwo auf?

              Setze einen PAUSE-Befehl an's Ende vom Batch, damit Du die lesen kannst.

              Und mit der Meldung zeig dann bitte dein Batch nochmal im Original vor. Pfad und EXE-Name kannst Du ja aus-X-en.

              Rolf

              --
              sumpsi - posui - clusi
          2. Hallo Martin,

            nein, das Anführungszeichendrama bei START hatte ich definitiv schon mit NT und XP. Aber unter denen hieß der Programmeordner eines deutschen Windows noch C:\Programme und man brauchte die Anführungszeichen seltener.

            Rolf

            --
            sumpsi - posui - clusi
  3. Mahlzeit,

    @echo off
    date 03.01.2017
    start C:\Program Files\path\file.exe
    

    Weder das Rücksetzen des Datums wird ausgeführt, noch startet das Programm, obwohl es in diesem Ordner als exe vorliegt.

    Pfade, die Leerzeichen enthalten, müssen in Anführungszeichen gesetzt werden.

    Und Zusatzfrage: Kann man in Batchdateien sowas wie einen Listener einfügen, der bei Beendigung des Programm automatisch die altuelle Systemzeit wiederherstellt?

    Nein. Aber du kannst auf "start" verzichten und stattdessen das Programm direkt aufrufen. Dann wartet die weitere Ausführung der Batchdatei darauf, dass das Programm endet.

    Ciao,
     Martin

    --
    Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
    1. Hallo Martin,

      Pfade, die Leerzeichen enthalten, müssen in Anführungszeichen gesetzt werden.

      Habe ich nun gemacht, aber das Programm wird nicht gefunden/geöffnet. Ist mir rätzelhaft, warum, ich habe alles kontrolliert bzw. mit copy/paste gearbeitet.

      Und Zusatzfrage: Kann man in Batchdateien sowas wie einen Listener einfügen, der bei Beendigung des Programm automatisch die altuelle Systemzeit wiederherstellt?

      Nein. Aber du kannst auf "start" verzichten und stattdessen das Programm direkt aufrufen. Dann wartet die weitere Ausführung der Batchdatei darauf, dass das Programm endet.

      Schöne Idee, danke.

      Und wie wird die Systemzeit eingestellt? Das geht gar nicht bei mir.

      Jochen

      1. Hi Jochen,

        Und wie wird die Systemzeit eingestellt? Das geht gar nicht bei mir.

        geht das denn manuell? Mir schwant da nämlich was: Üblicherweise ist Windows so konfiguriert, dass es die Systemzeit über NTP mit einem Zeitserver im Internet abgleicht. Möglich, dass bei erfolgreicher Synchronisierung dann ein manuelles Setzen der Systemzeit verhindert wird.

        Ciao,
         Martin

        --
        Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
        1. Hi Jochen,

          Und wie wird die Systemzeit eingestellt? Das geht gar nicht bei mir.

          geht das denn manuell? Mir schwant da nämlich was: Üblicherweise ist Windows so konfiguriert, dass es die Systemzeit über NTP mit einem Zeitserver im Internet abgleicht. Möglich, dass bei erfolgreicher Synchronisierung dann ein manuelles Setzen der Systemzeit verhindert wird.

          Hi Martin,

          doch, das geht. man muß die Batch nur als Administrator ausführen.

          Grüße, Jochen

    2. Hallo Martin,

      Dann wartet die weitere Ausführung der Batchdatei darauf, dass das Programm endet.

      Das kommt drauf an. Manche Programm lösen sich von der Konsole und lassen das Batchfile nicht warten. Ich finde natürlich jetzt prompt kein Beispiel dafür :( aber ich habe das schon erlebt.

      Es wäre natürlich schick, wenn das hier genutzte Programm auf diese Weise beim Übertölpeln seiner Evaluationsperiode mithelfen würde (oder weshalb fälscht man das Datum beim Start eines Programms?)

      Rolf

      --
      sumpsi - posui - clusi
      1. Hi,

        Dann wartet die weitere Ausführung der Batchdatei darauf, dass das Programm endet.

        Das kommt drauf an. Manche Programm lösen sich von der Konsole und lassen das Batchfile nicht warten. Ich finde natürlich jetzt prompt kein Beispiel dafür :( aber ich habe das schon erlebt.

        ich zwar nicht, aber das muss ja nichts heißen.

        Es wäre natürlich schick, wenn das hier genutzte Programm auf diese Weise beim Übertölpeln seiner Evaluationsperiode mithelfen würde (oder weshalb fälscht man das Datum beim Start eines Programms?)

        Genau daran dachte ich auch. ;-)

        So long,
         Martin

        --
        Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
      2. hi

        Dann wartet die weitere Ausführung der Batchdatei darauf, dass das Programm endet.

        Die Batchdatei wartet nur, wenn andere Programme von der Batchdatei aus mit call aufgerufen werden.

        MFG

      3. Hallo Rolf,

        Es wäre natürlich schick, wenn das hier genutzte Programm auf diese Weise beim Übertölpeln seiner Evaluationsperiode mithelfen würde (oder weshalb fälscht man das Datum beim Start eines Programms?)

        Mein Programm ist übrigens sehr schick 😀

        Dank auch an Dich und ne schönne Jroos,

        Jochen

  4. mein Vorhaben ist, eine Batchdatei zu schreiben, dass mein Systemdatum auf ein bestimmtest Datum zurücksetzt, danach ein bestimmtes Programm startet.

    Tu das möglichst nicht. Hintergrund-Virenchecker könnten sich über Dateien „wundern“, die neuer sind als das Systemdatum, eingehende Mails verschwinden scheinbar im Nirvana (weil die dann in paar Jahre alt zu sein scheinen), die Installation von Updates in Hintergrund schlägt (mit nicht vorhersehbaren Folgen) fehl, der Browsercache (und jeder andere von den vielen Caches (Font, Icons,... auch) geht „kaputt“ - und das sind nur vier von jeder Menge denkbaren Szenarios.

    Diese „Lösung“ hat also vorhersehbar mehr und vor allem schwerere Nach-als Vorteile.

    1. Tu das möglichst nicht. Hintergrund-Virenchecker könnten sich über Dateien „wundern“, die neuer sind als das Systemdatum, eingehende Mails verschwinden scheinbar im Nirvana (weil die dann in paar Jahre alt zu sein scheinen), die Installation von Updates in Hintergrund schlägt (mit nicht vorhersehbaren Folgen) fehl, der Browsercache (und jeder andere von den vielen Caches (Font, Icons,... auch) geht „kaputt“ - und das sind nur vier von jeder Menge denkbaren Szenarios.

      Diese „Lösung“ hat also vorhersehbar mehr und vor allem schwerere Nach-als Vorteile.

      Ich habe das aber schon öfter gemacht. Natürlich schließe ich erstmal alle anderen fenster, aber danch habe ich das schon öfter praktiziert.

      Jochen

  5. Das Datum setzten müsste aber so gehen genauso gibt man das ja auf der Kommandozeile ein: date 1.1.2000 . Und in der Batch natürlich auch so:

    date /t  > freezeddate.txt
    date 1.1.2000
    call "C:\Programme\TextPad 5\TextPad.exe" 
    date < freezeddate.txt     
    

    MFG