none
Datum und Uhrzeit per Batch in Ordnernamen mit robocopy aktualisieren. RRS feed

  • Frage

  • Hi,

    Ich habe ein herausforderndes Problem in diesem Skript.

    Das Skript funktioniert super, aber der Ordner, der beim Start des Skripts mit dem aktuellen Datum erstellt wird, wird während das Skript läuft nicht nochmal mit dem neuen aktuellen Datum erstellt, sondern bleibt beim alten Datum vom ersten Ordner, bedeutet der alte Ordner wird überschrieben oder nichts passiert dank (/XC /XN /XO). 
    Das liegt daran, dass das Skript in eine unendliche Schleife geht wegen /mon:1 /mot:1, was gut ist, aber das Datum wird NICHT aktualisiert.

    Wie kann ich das so machen, dass der Ordner nicht überschrieben wird, sondern immer ein neuer Ordner mit dem aktuellen Datum erstellt wird?
    Ich habe Vieles probiert, nichts hat geholfen. Ich bevorzuge "robocopy" und hoffe, dass jemand ne Idee hat fürs Problem.

    Bitte um Hilfe, danke sehr!


    Code:
    <code>
    @echo off
    color 2

    Set Source=C:\source
    Set Destination=C:\destination
    Set Folder=FolderName
    Set currentdate=%date:/=-%_%time::=-%

    robocopy "%Source%" "%Destination%\%currentdate% %Folder%" /E /XC /XN /XO /mon:1 /mot:1
    </code>
    • Bearbeitet Batcher001 Samstag, 17. Oktober 2020 09:59 Falsches Formatting!!!
    Samstag, 17. Oktober 2020 00:31

Antworten

  • Das alles tut schon das Skript, welches ich bei dem ersten Post reinkopiert habe.

    Nein, tut es nicht ... sorry.

    Das Problem ist nur, dass das Datum im kopierten Ordner-Namen NICHT aktualisiert wird, höchstwahrscheinlich, weil das Skript wegen /mon:1 /mot:1 in eine Schleife geht und das Datum, deswegen nicht aktualisiert wird. Nur dabei brauch ich Hilfe.

    Ich fürchte, da hast Du etwas falsch verstanden. Wenn Du robocopy mit den Optionen /mon:1 /mot:1 aufrufst, gibt es die Kontrolle nicht wieder an das aufrufende Script ab, bis Du es manuell beendest/killst. Es wartet nach dem initialen Copy-Job jeweils eine Minute und prüft dann ob es mindestens eine Änderung in der Quelle gab. Entdeckt es die nach einer Minute, kopiert es die geänderten Dateien in das gleiche im ersten Aufruf angegebene Ziel. Das Script, welches Du zuerst gepostet hast, enthält keine Schleife.

    Ich habe mich mittlerweile entschieden das in PowerShell zu machen, weil keiner mir mit einer Lösung helfen konnte, außer das Skript neu zu starten mit dem Aufgabenplaner (Was ich nicht machen würde).

    Du erwartest etwas, was technisch nicht geht. Man kann auch nicht mit einem Handwagen einen liegengebliebenen Bus abschleppen. ;-) Das mit dem Aufgabenplaner war nur ein Vorschlag. Da gibt es noch andere Möglichkeiten ... nur Zaubern geht mit Windows eben nicht.

    Ein Skript habe ich schon für PowerShell, aber genau das gleiche Problem habe ich auch da.

    Weil auch das keine Schleife enthält. Bitte verabschiede Dich von dem Gedanken, dass robocopy mit nur einem Aufruf in verschiedene Ziel-Ordner kopiert. Das wird nicht funktionieren. Ich hab Dir hier mal etwas zusammengeklimpert, was Deinen Anforderungen einigermaßen entsprechen dürfte. Bitte Versuch den Code zu verstehen und teste es bitte mit Test-Daten!!

    $Source = 'zu überwachender Quell-Ordner'
    $Destination = 'Ziel-Ordner'
    
    for ($i = 0; $i -lt 10; $i++) {
        "Schleifendurchlauf '$($i)'"
        $Now = Get-Date -Format 'yyyy-MM-dd_HH-mm-ss_'
        $Folder = Join-Path -Path $Destination -ChildPath ($Now + (Split-Path -Path $Source -Leaf))
        if (Get-ChildItem -Path $Source -Recurse -Force | Where-Object { $_.Attributes -match 'Archive' }) {
            robocopy $Source $Folder /E
            Push-Location -Path $Source
            attrib -A /S /D
            Pop-Location
        }
        Start-Sleep -Seconds (1*60)  # ... Powershell wartet 1 mal 60 Sekunden (1 Minute). Wenn Du zum Testen länger warten möchtest, einfach die 1 durch eine beliebig höhere Zahl ersetzen ;-)
    }

    In diesem Schnipsel wird die Schleife ganz stumpf einfach zehn mal abgearbeitet. ich würde Dir aber immer noch empfehlen, in Deinem zukünftigen produktiven Script den Intervall-Trigger extern zu generieren. Das macht das Script deutlich robuster. Falls es im Script doch mal einen Fehler gibt, wirkt sich der idealerweise nur auf den einen Schleifendurchlauf aus und nicht auf alle weiteren. ;-)

    In der Schleife wird der Zeitstempel erzeugt, der Ziel-Ordner-Name generiert und dann anhand der Archiv-Attribute geprüft, ob geänderte Dateien vorhanden sind. Sind sie das, kopiert robocopy den kompletten Ordner in den Ziel-Ordner, dann werden im Quell-Ordner von allen Dateien die Archiv-Attribute entfernt. Danach legt sich das Script eine Minute schlafen und durchläuft die Schleife dann erneut. Aber wie schon erwähnt, da wäre meine Empfehlung, das nicht aus dem Script heraus zu machen.

    Ich hab heute übrigens auch Etwas gelernt. robocopy tastet die Attribute der Quell-Dateien gar nicht an. Deshalb der Extra-Schritt mit dem Entfernen der Archiv-Attribute nach dem Copy-Job. Also danke dafür. ;-)

    ... und viel Spaß beim Testen.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''


    Sonntag, 18. Oktober 2020 01:41

Alle Antworten

  • Moin,

    Bitte Code als Code posten - nicht mit einem Markup, das die Forums-Engine nicht unterstützt, sondern einfach den 2. Button von rechts verwenden.

    Deine Frage hast Du bereits selbst beantwortet: Die unendliche Schleife muss nicht *mit* Robocopy, sondern *um Robocopy herum* realisiert werden.

    Wenn Batch Dir heilig ist, einfach mit Sprungmarke am Anfang und GOTO am Ende Arbeiten, und natürlich /mon und /mot rausnehmen...


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Samstag, 17. Oktober 2020 07:00
  • wenn es nur einmal ist, schau dir bitte einmal den FreeComander an. Der kann Zeitstempel ändern.

    Samstag, 17. Oktober 2020 10:07
  • Hi,

    Ja so einfach ist es nicht, glaub mir ich sitze seit Tagen dran. Goto funktioniert gar nicht, macht ja auch Sinn, denn wenn es bei /mon  und /mot ist es schon in der Schleife und geht nie zur nächsten Zeilte. /mon und /mot rauszunehmen löst nicht mein Problem, die brauch ich ja, weil 2 Bedingungen erfüllt sein müssen, um ein Backup zu machen. Nur das Datum und Zeit im Namen des Ordners aktualisieren sich nicht.


    Ich habe es mittlerweile fast aufgegeben mit Batch, weil viele sagen es ist veraltet und PowerShell ist besser.. und vor allem ich keine Lösung finde.

    Aber ich kenne mich mit PowerShell genau so wenig, deswegen wäre ich sehr dankbar, wenn jemand mir dieses Skript in PowerShell schreibt.

    Was das Skript tun soll: 

    1. Einen Ordner von Source in Destination kopieren mit dem gesamten Inhalt des Ordners.

    2. Den Ordner nur dann kopieren, wenn 2 Bedingungen erfüllt sind und zwar n Änderungen wurden im Source Ordner vorgenommen UND x Minuten sind vergangen. (Also wie mit robocopy /mon:1 /mot:1)

    3. Der Name des Ordners von Source soll nach dem Backup in das aktuelle Datum und Uhrzeit + Name des Ordners umbenannt werden. (Wichtig: Datum und Uhrzeit müssen dem Zeitpunkt des Backups entsprechen, sodass neuere Backups keine alten überschreiben.)

    4. Optional: Es wäre schön, wenn man das Skript automatisch starten lässt, wenn eine andere Anwendung gestartet wurde.

    Ich wäre sehr dankbar, wenn jemand dieses Skript in PowerShell schreiben würde, danke sehr!

    Samstag, 17. Oktober 2020 10:13
  • Batcher001,

    Hallo erstmal und Willkommen im Deutschen Microsoft Windows Powershell Forum! ;-)

    Ich wäre sehr dankbar, wenn jemand dieses Skript in PowerShell schreiben würde, danke sehr!

    Wir schreiben hier keine gebrauchsfertigen Scripte auf Anfrage. Die Meisten von uns verdienen mit dieser Dienstleistung ihren Lebensunterhalt. Da werden wir das hier nicht kostenlos frei Haus liefern. ;-) Aber wir können Dir helfen, Dir selbst zu helfen, wenn Du ein bissl mitmachst. ;-) Mit Powershell kennen wir uns ziemlich gut aus.

    Aber ich kenne mich mit PowerShell genau so wenig, ....

    Wenn Du Dich mit beiden Varianten gleich schlecht auskennst, ist es ja auch egal was Du nimmst, richtig? :-D


    Fangen wir mit Deinen Anforderungen an ...

    4. Optional: Es wäre schön, wenn man das Skript automatisch starten lässt, wenn eine andere Anwendung gestartet wurde.

    Das kannst Du prinzipiell auf zwei Arten erreichen. Entweder Du lässt das Script permanent laufen und Du prüfst im Script den Start der Anwendung - das hielte ich aber nicht für die beste Lösung - oder Du startest das Script mit einem "externen" Mechanismus bei Bedarf - z.B. über die Aufgabenplanung.

    2. Den Ordner nur dann kopieren, wenn 2 Bedingungen erfüllt sind und zwar n Änderungen wurden im Source Ordner vorgenommen UND x Minuten sind vergangen. (Also wie mit robocopy /mon:1 /mot:1)

    In robocopy wird bei diesen Schaltern die Quelle überwacht und bei Änderungen erneut kopiert - in das gleiche Ziel!!! Wenn ich Dich nicht falsch verstanden habe, willst Du aber immer ein neues Ziel, oder? Das geht also mit robocopy nicht. Du könntest Deine Lösung aber an dieser Stelle sogar verbessern. Wenn Du mit robocopy und den Schaltern /A+ und /A+ die bereits kopierten oder bearbeiteten oder geprüften Dateien markierst, brauchst Du in Zukunft nur noch die neuen Dateien kopieren - ein differenzielles Backup sozusagen. Das könnte potenziell viel Platz sparen. In Powershell benutzen wir Get-ChildItem, um eine Liste von Dateien einzulesen. Diese Liste kann man z.B. mit Where-Object  nach beliebigen Kriterien filtern ... .z.B. nach dem Alter von Dateien oder ob ein Archiv-Attribut gesetzt ist oder nicht. ;-)

    1. Einen Ordner von Source in Destination kopieren mit dem gesamten Inhalt des Ordners.

    Beim Kopieren ist robocopy deutlich schneller als Powershell. Das könnte man also beibehalten. Aber warum immer jedesmal den kompletten Ordner? Abhängig von der Größe des Ordners und der Häufigkeit der Ausführung, hast Du am Ende einen riesen Haufen redundanter Dateien!?

    3. Der Name des Ordners von Source soll nach dem Backup in das aktuelle Datum und Uhrzeit + Name des Ordners umbenannt werden. (Wichtig: Datum und Uhrzeit müssen dem Zeitpunkt des Backups entsprechen, sodass neuere Backups keine alten überschreiben.)

    Den Punkt hab ich nicht so richtig verstanden. Soll der Quell-Ordner umbenannt werden oder der nach "Destination" kopierte Ordner? Wenn's das zweite ist, könnte der ja gleich als Ziel-Ordner mit dem richtigen Namen erstellt werden, oder? ;-) ... wenn's das erste ist, fallen mir gleich weitere Fragen ein.

    Wie auch immer, um das Ganze wirklich beurteilen zu können, bräuchte man ein paar mehr detaillierte Informationen.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Samstag, 17. Oktober 2020 14:45
  • was spricht gegen einen Schedule Task (alle Minuten) und einem XCOPY /M

    /M        Kopiert nur Dateien mit gesetztem Archivattribut,
                setzt das Attribut nach dem Kopieren zurück.

    dann hast du eine verlässliche und funktionierende Kopie deiner Daten und wäre für dich mit geringen Scriptkenntnissen nachvollziehbarer.

    xcopy c:\daten\*.* d:\daten\ /E /R /M /y

    Den PUnkt 3. Source umbenennen habe ich auch nicht ganz verstanden. Kann nur ein Tippfehler sein.

    Samstag, 17. Oktober 2020 17:34
  • Hi und danke für die Antworten!

    Also ganz kurz und einfach:

    1. OrdnerX soll von Source nach Destination kopiert werden. In Destination wird er umbenannt in: Aktuelles Datum + Name des Ordners.

    2. Der Ordner soll, aber nicht nur alle X min (z.B. 30min) kopiert werden, sondern AUCH, wenn im Source-Ordner etwas geändert wurde (beide Bedingungen müssen erfüllt sein). 


    Infos: Der Source-Ordner soll natürlich nur in einen Ziel-Ordner kopiert werden!

    Und ja der Ordner soll mit dem gesamten Inhalt kopiert werden und NICHT nur Dateien, die geändert wurden. (Datenredundanz = egal)

    Das alles tut schon das Skript, welches ich bei dem ersten Post reinkopiert habe.

    Das Problem ist nur, dass das Datum im kopierten Ordner-Namen NICHT aktualisiert wird, höchstwahrscheinlich, weil das Skript wegen /mon:1 /mot:1 in eine Schleife geht und das Datum, deswegen nicht aktualisiert wird. Nur dabei brauch ich Hilfe.

    Ich habe mich mittlerweile entschieden das in PowerShell zu machen, weil keiner mir mit einer Lösung helfen konnte, außer das Skript neu zu starten mit dem Aufgabenplaner (Was ich nicht machen würde).


    Ein Skript habe ich schon für PowerShell, aber genau das gleiche Problem habe ich auch da.

    Code:

    copy-Item $From -Destination $to -Recurse
    
    $Source      ="C:\Users\...\source"
    $Destination ="C:\Users\...\destination"
    $Folder      ="(Folername)"
    $currentdate = get-date -Format "dd-MM-yyyy-HH.mm"
    
    
    robocopy "$Source" "$Destination\$currentdate $Folder" /E /XC /XN /XO /mon:1 /mot:1

    Also liebe PowerShell-Experten, wie würdet ihr dieses Problem lösen, dass das Datum sich bei jedem Backup immer aktualisiert? 

    Ich bin für jede Hilfe dankbar!









    • Bearbeitet Batcher001 Samstag, 17. Oktober 2020 18:47 Tippfehler
    Samstag, 17. Oktober 2020 18:32
  • Das alles tut schon das Skript, welches ich bei dem ersten Post reinkopiert habe.

    Nein, tut es nicht ... sorry.

    Das Problem ist nur, dass das Datum im kopierten Ordner-Namen NICHT aktualisiert wird, höchstwahrscheinlich, weil das Skript wegen /mon:1 /mot:1 in eine Schleife geht und das Datum, deswegen nicht aktualisiert wird. Nur dabei brauch ich Hilfe.

    Ich fürchte, da hast Du etwas falsch verstanden. Wenn Du robocopy mit den Optionen /mon:1 /mot:1 aufrufst, gibt es die Kontrolle nicht wieder an das aufrufende Script ab, bis Du es manuell beendest/killst. Es wartet nach dem initialen Copy-Job jeweils eine Minute und prüft dann ob es mindestens eine Änderung in der Quelle gab. Entdeckt es die nach einer Minute, kopiert es die geänderten Dateien in das gleiche im ersten Aufruf angegebene Ziel. Das Script, welches Du zuerst gepostet hast, enthält keine Schleife.

    Ich habe mich mittlerweile entschieden das in PowerShell zu machen, weil keiner mir mit einer Lösung helfen konnte, außer das Skript neu zu starten mit dem Aufgabenplaner (Was ich nicht machen würde).

    Du erwartest etwas, was technisch nicht geht. Man kann auch nicht mit einem Handwagen einen liegengebliebenen Bus abschleppen. ;-) Das mit dem Aufgabenplaner war nur ein Vorschlag. Da gibt es noch andere Möglichkeiten ... nur Zaubern geht mit Windows eben nicht.

    Ein Skript habe ich schon für PowerShell, aber genau das gleiche Problem habe ich auch da.

    Weil auch das keine Schleife enthält. Bitte verabschiede Dich von dem Gedanken, dass robocopy mit nur einem Aufruf in verschiedene Ziel-Ordner kopiert. Das wird nicht funktionieren. Ich hab Dir hier mal etwas zusammengeklimpert, was Deinen Anforderungen einigermaßen entsprechen dürfte. Bitte Versuch den Code zu verstehen und teste es bitte mit Test-Daten!!

    $Source = 'zu überwachender Quell-Ordner'
    $Destination = 'Ziel-Ordner'
    
    for ($i = 0; $i -lt 10; $i++) {
        "Schleifendurchlauf '$($i)'"
        $Now = Get-Date -Format 'yyyy-MM-dd_HH-mm-ss_'
        $Folder = Join-Path -Path $Destination -ChildPath ($Now + (Split-Path -Path $Source -Leaf))
        if (Get-ChildItem -Path $Source -Recurse -Force | Where-Object { $_.Attributes -match 'Archive' }) {
            robocopy $Source $Folder /E
            Push-Location -Path $Source
            attrib -A /S /D
            Pop-Location
        }
        Start-Sleep -Seconds (1*60)  # ... Powershell wartet 1 mal 60 Sekunden (1 Minute). Wenn Du zum Testen länger warten möchtest, einfach die 1 durch eine beliebig höhere Zahl ersetzen ;-)
    }

    In diesem Schnipsel wird die Schleife ganz stumpf einfach zehn mal abgearbeitet. ich würde Dir aber immer noch empfehlen, in Deinem zukünftigen produktiven Script den Intervall-Trigger extern zu generieren. Das macht das Script deutlich robuster. Falls es im Script doch mal einen Fehler gibt, wirkt sich der idealerweise nur auf den einen Schleifendurchlauf aus und nicht auf alle weiteren. ;-)

    In der Schleife wird der Zeitstempel erzeugt, der Ziel-Ordner-Name generiert und dann anhand der Archiv-Attribute geprüft, ob geänderte Dateien vorhanden sind. Sind sie das, kopiert robocopy den kompletten Ordner in den Ziel-Ordner, dann werden im Quell-Ordner von allen Dateien die Archiv-Attribute entfernt. Danach legt sich das Script eine Minute schlafen und durchläuft die Schleife dann erneut. Aber wie schon erwähnt, da wäre meine Empfehlung, das nicht aus dem Script heraus zu machen.

    Ich hab heute übrigens auch Etwas gelernt. robocopy tastet die Attribute der Quell-Dateien gar nicht an. Deshalb der Extra-Schritt mit dem Entfernen der Archiv-Attribute nach dem Copy-Job. Also danke dafür. ;-)

    ... und viel Spaß beim Testen.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''


    Sonntag, 18. Oktober 2020 01:41
  • Hallo zusammen,  Das Skript soll den Ordner "Source" kopieren unter der Bedingung, dass mindestens eine Änderung in den letzten 5 Minuten in "Source" stattgefunden haben muss. Das Ganze soll in einer dauerhaften Schleife sein.

    Es soll genau das Gleiche tun was /mon:1 /mot:1 tut, nur das Problem ist, dass mit /mon:1 /mot:1 die Variable $currentdate nicht aktualisiert wird, wenn der Ordner kopiert wird.

    Ich bitte um Hilfe und danke sehr!

    copy-Item $From -Destination $to -Recurse $Source ="C:\Users\...\source" $Destination ="C:\Users\...\destination" $Folder ="(folder x)" $currentdate = get-date -Format "dd-MM-yyyy-HH.mm"

    robocopy "$Source" "$Destination\$currentdate $Folder" /E /XC /XN /XO


    Donnerstag, 26. November 2020 15:59
  • Moin,

    irgendwie erinnert mich die Fragestellung an etwas, was wir vor ein paar Wochen hier hatten. Egal, zu faul zum Suchen.

    Du schaust im einfachsten Fall (und bei nicht ganz so vielen Dateien im Ordner) auf 

    Get-ChildItem -Path $source | Sort-Object LastWriteTime -Descending | Select-Object -First 1 -ExpandProperty LastWriteTime
    und bei vielen bis sehr vielen Dateien musst Du dich mit dem Thema FileSystemWatcher beschäftigen.


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Donnerstag, 26. November 2020 17:24
  • Egal, zu faul zum Suchen.

    Ich hab mal für Dich gesucht. ;-) 

    Datum und Uhrzeit per Batch in Ordnernamen mit robocopy aktualisieren.

    Ich würd mal tippen, dass da einer mit Antwort nicht zufrieden war und sich einen neuen Account angelegt hat und es jetzt einfach nochmal versucht.  Sogar die Grußformel am Ende ist gleich.  ;-) :-D


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 26. November 2020 18:57
  • Genau!

    Jemand hat mir auch ein Skript netterweise geschrieben, wahrscheinlich warst du das, aber es hat leider nicht funktioniert. Wäre nett, wenn du das Skript bei dir probierst. 

    Der Ordner "Source" soll nur kopiert werden, wenn innerhalb der letzten 5min 1 Änderung im Ordner "Source" gab. Im Prinzip, genau das Selbe was /mon:1 /mot:1 tut, nur da updated sich das Datum nicht. Die Schleife soll endlos sein.

    Danke nochmal für die Hilfe!

    $Source = 'Source'
    $Destination = 'Destination'
    
    for ($i = 0; $i -lt 10; $i++) {
        "Schleifendurchlauf '$($i)'"
        $Now = Get-Date -Format 'yyyy-MM-dd_HH-mm-ss_'
        $Folder = Join-Path -Path $Destination -ChildPath ($Now + (Split-Path -Path $Source -Leaf))
        if (Get-ChildItem -Path $Source -Recurse -Force | Where-Object { $_.Attributes -match 'Archive' }) {
            robocopy $Source $Folder /E
            Push-Location -Path $Source
            attrib -A /S /D
            Pop-Location
        }
        Start-Sleep -Seconds (1*60)
    }

    Freitag, 27. November 2020 11:00
  • Mhm...so ein Manöver ist generell unerwünscht, schon alleine da neu hinzukommende, nicht sehen was bisher besprochen wurde. Da der alte Thread aber so... sagen wir nicht sehr strukturiert begann, lass ich dir den mal stehen. Aber, ob es dir was hilft...

    Freitag, 27. November 2020 11:14
    Moderator
  • Danke! 

    Ich kann nicht sehen was da steht bei "Rechts-Klick zum verschieben".

    Wenn ich die Antwort habe, poste ich sie auch dort, wenn ich dran denke..

    Freitag, 27. November 2020 11:28
  • .... aber es hat leider nicht funktioniert.

    Was soll das heißen? Was hat nicht funktioniert? Bei meinen Tests hat das Script genau so funktioniert, wie ich es beschrieben hatte.

    Du hattest jetzt über einen Monat Zeit und bist offenbar keinen Millimeter weitergekommen. Ich habe ehrlich gesagt keine Lust, Deine Hausaufgaben zu machen. 

    Wenn Du prüfen willst, ob eine Datei oder mehrere Dateien in den letzten 5 Minuten geändert wurden, kannst Du Get-ChildItem benutzen und die Property LastWriteTime entsprechend auswerten. Das kannst Du dann als Bedingung dafür heranziehen, ob kopiert werden soll oder nicht.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Freitag, 27. November 2020 12:02
  • Alles gut, habs nochmal getestet, funktioniert jetzt, sry und danke für dein wunderschönes Skript! Ich werde noch schauen, wie ich es hinkriege, dass ich die Schleife endlos machen kann, solange das Skript läuft. Danke nochmal!!
    Freitag, 27. November 2020 12:26
  • Ich werde noch schauen, wie ich es hinkriege, dass ich die Schleife endlos machen kann, solange das Skript läuft.
    Wie ich schon im anderen Thread geschrieben hatte - ich würde eher empfehlen, das Script über die Aufgabenplanung alle 5 Minuten neu zu starten, anstatt es mit einer internen Schleife dauerhaft laufen zu lassen.

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Freitag, 27. November 2020 13:16
  • Danke für deine Hilfe!

    ich brauche jetzt nur einen Timer/Countdown, der anzeigt, wie viele Minuten oder Sekunden verbleiben bis zum nächsten Durchlauf. Es soll unten bei Write-Host am Ende stehen. 

    Der Timer soll in der selben Zeile sein, mit `r geht es. Ich weiß nicht, wie man es hinkriegt mit der Schleife usw.

    Ich danke jedem für Hilfe.

    $Source = 'Source' $Destination = 'Destination' for ($i = 0; $i -lt 10; $i++) { "Schleifendurchlauf '$($i)'" $Now = Get-Date -Format 'yyyy-MM-dd_HH-mm-ss_' $Folder = Join-Path -Path $Destination -ChildPath ($Now + (Split-Path -Path $Source -Leaf)) if (Get-ChildItem -Path $Source -Recurse -Force | Where-Object { $_.Attributes -match 'Archive' }) { robocopy $Source $Folder /E Push-Location -Path $Source attrib -A /S /D Pop-Location

    } else {
        Write-Host "Nichts wurde geändert - DurchlaufNr. = [$($i)] Zeit bis zum nächsten Backup: "

    } Start-Sleep -Seconds (2*60) }


    Samstag, 28. November 2020 21:35
  • ich brauche jetzt nur einen Timer/Countdown, der anzeigt, wie viele Minuten oder Sekunden verbleiben bis zum nächsten Durchlauf. Es soll unten bei Write-Host am Ende stehen.

    Ich fürchte, Du hast nicht wirklich verstanden, was der Code wirklich tut und vor allem, dass er nicht das tut, was Du eigentlich möchtest.

    Der Timer soll in der selben Zeile sein, mit `r geht es. Ich weiß nicht, wie man es hinkriegt mit der Schleife usw.

    Wenn Du einen Schleifen-Zähler möchtest, musst Du den selbst programmieren. Sowas gibt es nicht eingebaut.  .... und sowas sieht auch nicht schön aus ... jedenfalls nicht, ohne deutlich mehr Aufwand ...

    $Sekunden = 60
    for ($i = 0; $i -lt $Sekunden; $i++) {
        Start-Sleep -Seconds 1
        "Diese Schleife läuft ca. '$i' Sekunden"
    }

    Bitte versuch erstmal die Grundlagen von Powershell / Scripting zu lernen bevor Du komplexere Scripte angehst.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Montag, 30. November 2020 15:06
  • Nun habe ich ein anderes Problem und zwar

    Für ein anderes Problem, erstellst Du bitte einen neuen Thread. 

    ... und bitte denk daran, dass wir weder Deinen Bildschirm sehen können, noch Deine Gedanken lesen. Du wirst also etwas detaillierter beschreiben müssen, was genau Dein Problem ist.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Montag, 30. November 2020 21:21