Zeit in eine Datei in einer For-Schleife schreiben

Zeit in eine Datei in einer For-Schleife schreiben

In Windows 2008: Ich versuche, Dateien zu komprimieren und auf einen Backup-Server zu kopieren. Ich verwende die Befehlszeile/Batchdatei, ich protokolliere das Ergebnis in einer Protokolldatei, ich möchte jetzt auch die Zeit fürjedeDatei wird geloopt.

Die Batchdatei backupZipCopy.bat:

setlocal enabledelayedexpansion
echo starting at %date% %time%>>c:\backup\resuZip.log
d:
cd \myDirectoryToBackup
FOR %%i IN (*.nsf)  DO (
echo %date% %time%>>c:\backup\resuZip.log 
"C:\Program Files\7-Zip\7z.exe"  -bd u "\\backupServer\myBackup\%%~ni.zip" "%%~fi">>c:\backup\resuZip.log
)

Mein Problem:Die Zeit ist dieDasselbefür die gesamte Batch-Dauer (die Zeit, in der Batchgestartetals ich die Echtzeit in jeder Schleife erwartet habe). Ich habe bereits „setlocal enabledelayedexpansion“ angegeben, was nicht hilft (brauche ich das also oder nicht?).

NB: timethis wird mein Problem nicht lösen, da ich in jeder Schleife Zeit brauche. NB2: Ich rufe diesen Batch vom Fensterplaner aus auf.

Antwort1

Das Problem besteht darin, dass in der Zeile (der ( )Block wird als einzelne Zeile analysiert) alle %foo%Variablen nur einmal ausgewertet werden, bevor die forSchleife ausgeführt wird.

Die enabledelayedexpansionOptiontutHilfe. Es ändert jedoch nicht die Parsing-Regeln für die übliche %foo%Variablensyntax. Stattdessen führt es eine neue ein – die Verwendung von !als Trennzeichen.

for %%i in (*.nsf) do (
    echo !date! !time!>> C:\backup\resuZip.log
)

Seien Sie dabei jedoch sehr vorsichtig, da die verzögerte Erweiterung erst erfolgt, nachdem die Variablen erweitert wurden. Wenn eine Variable Ausrufezeichen enthält, %foo%führt dies daher zu einer unerwarteten Ausgabe . Die Analyseregeln von cmd.exe sind manchmal geradezu schmerzhaft.%

Ich empfehle Ihnen dringend, für Ihr Skript eine andere Sprache zu verwenden. PowerShell wäre eine gute Wahl, da es Teil der meisten aktuellen Windows-Versionen ist und über Tools zur Verwaltung verschiedener Windows Server-Komponenten verfügt.

verwandte Informationen