@ECHO OFF
SETLOCAL EnableExtensions
rem get CIM_DATETIME
for /f "tokens=2 delims==" %%G in (
'wmic OS get localdatetime /value') do set "ldt=%%G"
rem simplified format yyyymmddHHMMSS.mm e.g. 20160610160046.36
set "isodt=%ldt:~0,17%"
echo simplified format yyyymmddHHMMSS.mm %isodt%
rem modified ISO format yyyy-mm-dd_HH-MM-SS.mm e.g. 2016-06-10_16-00-46.36
set "isodt=%ldt:~0,4%-%ldt:~4,2%-%ldt:~6,2%_%ldt:~8,2%-%ldt:~10,2%-%ldt:~12,5%"
echo modified ISO format yyyy-mm-dd_HH-MM-SS.mm %isodt%
rem use quotes around the output file (thanks for the thought, Stephan)
DatabaseCleansing.Process.exe > "output\output_%isodt%.txt"
Erklärung: Ihr Skript würde funktionieren wie erwartet, wenn zwischen 10:00:00
und 23:59:59
laufen. Die %time%
Variable enthält jedoch einen führenden Abstand zwischen 00:00:00
und 09:59:59
.
Dieses Verhalten tritt trotz der nächsten Formateinstellungen
==> reg query "HKCU\Control Panel\International" | findstr /I "sTimeFormat sShortTime"
sTimeFormat REG_SZ HH:mm:ss
sShortTime REG_SZ HH:mm
obwohl HH
sollte es mit einer der führenden Null die Stunde anzuzeigen; Vergleichen Sie, was der Change the display of dates, times, currency, and measurements Artikel sagt:
Wählen Sie die Datums- und Uhrzeitformate, die Sie verwenden möchten. Windows verwendet folgende Schreibweisen angeben wie Datum und Uhrzeit angezeigt werden:
Time notations Displays
-------------- --------
h Hour (hh displays the hour with a leading zero)
m Minute (mm displays the minute with a leading zero)
s Second (ss displays the second with a leading zero)
h/H 12 or 24 hour time display
Verwenden
@SET "isodt=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME::=-%"
@SET "isodt=%isodt: =0%"
oder besser erhalten %isodt%
Variable aus locale unabhängigCIM_DATETIME yyyymmddHHMMSS.mmmmmmsUUU
format. Zum Beispiel könnten Sie next code snippet ändern Bindestriche hinzuzufügen und unterstreicht:
rem obtain %datetime% variable in locale independent yyyymmddHHMMSS format
for /f "tokens=2 delims==" %%G in (
'wmic OS get localdatetime /value') do set "datetime=%%G"
set "isodt=%datetime:~0,17%"
, Darüber hinaus SET "isodt=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME::=-%"
Befehl könnte scheitern auch . 20- 0-10_15-22-11,63
unter folgenden kurzen Datumsformat Einstellung zurückkehrt, die in unerwünschter Weise die standardmäßig für meine Windows-8.1 Originalsystem vorinstalliert wurde locale als Raum angeblich sollte nach jedem Stillstand folgen, indem sie falsch interpretiert Czech language grammar rules:
==> reg query "HKCU\Control Panel\International" /V sShortDate
HKEY_CURRENT_USER\Control Panel\International
sShortDate REG_SZ dd. MM. yyyy
Verwendung Anführungszeichen um die Ausgabedatei: '>" output \ output_% isodt% .txt "(siehe @ JosefZs Antwort zur Erklärung). Obwohl ich Josefs locale unabhängige Lösung bevorzugen würde. – Stephan