W skrypcie DOS natrafiłem na błąd, który używa danych daty i godziny do nazewnictwa plików. Problem polegał na tym, że skończyłem z luką, ponieważ zmienna czasu nie zapewniała automatycznie wiodącego zera dla godziny <10. Więc uruchomienie> echo% time% zwraca: „9: 29: 17.88”.
Czy ktoś zna sposób warunkowego wypełnienia zer wiodących, aby to naprawić?
Więcej informacji: Polecenie zestawu moich plików to:
set logfile=C:\Temp\robolog_%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
co kończy się na: C: \ Temp \ robolog_20100602_ 93208.log (dla 9:23 rano).
To pytanie jest związane z tym .
Dzięki
Odpowiedzi:
Bardzo prostym sposobem jest po prostu zastąpienie wiodącej przestrzeni spacją:
echo %TIME: =0%
wyjścia:
09:18:53,45
źródło
set HH=%time:~-11,2% set MM=%time:~-8,2% set SS=%time:~-5,2% set ISOTIME=%HH: =0%-%MM%-%SS% echo %ISOTIME%
Patrz także ss64.com/nt/syntax-replace.htmlset timestring=%TIME: =0%
początku wywołania podrzędnego - wtedy po prostu pracuj z nimtimestring
(lub dowolną zmienną, której używasz).Moje rozwiązanie polegało na zastosowaniu następującego pomysłu:
źródło
but gives syntax error on server 2003
- dlaczego dbasz o to w 2016 roku?Podobny pomysł do odpowiedzi Dennisa . Problem polega na tym, że szerokość
%time%
jest zawsze taka sama, więc wstawia spację na początku zamiast zwracać krótszy ciąg.Możesz się tego pozbyć dzięki
for
:Reszta jest mniej więcej taka sama.
źródło
Korzystając z Jesse's Contribution, właśnie utworzyłem zmienną ze zmodyfikowanym wyjściem. Następnie odwołuję się do tej zmiennej, aby zbudować porcję godzinową.
Z oryginalnym źródłem:
Dzięki Jesse. Głosowałbym, gdybym miał punkty reputacji.
źródło
Myślę, że w przypadku najbardziej kompaktowego rozwiązania wdrażającego wszystko powyżej
działałoby tutaj bez dodawania nowych wierszy do skryptu. Być może jest mniej elegancki niż wiele rozwiązań dowodzenia, jednak ...
źródło
Poniższe zawiera jeszcze kilka zdań, ale jest jasne i zrozumiałe. Oszczędza stdout i stderr do oddzielnych plików, każdy ze znacznikiem czasu. Sygnatura czasowa obejmuje rok, miesiąc, dzień, godzinę, minuty i sekundy w tej kolejności. Znaczniki czasu powinny zawsze mieć najistotniejszy składnik daty pierwszy (rok), a najmniej składnik (sekundy) ostatni. Dzięki temu lista plików może być uporządkowana w czasie. Bez zbędnych ceregieli, oto moje rozwiązanie.
źródło
To oznacza zero na początku czasu i zajmuje dwie ostatnie cyfry godziny (minuta i druga pozycja początkowa są przesunięte o jedną). Tak więc 3 rano staje się „03”, a następnie „03”, a godzina 15 staje się „015”, a następnie „15”.
Mniej czytelne:
źródło
Jedna linia kodu zrobi to, czego potrzebujesz:
Na przykład używam% Date%, a następnie dodaję wiodące zero do zmiennej, której używam, aby ustalić, czy muszę zamienić wiodącą spację na zero dla% Time%.
źródło
Tworzy to sortowalny znacznik czasu, a drugi wiersz zapewnia, że nie ma spacji dla jednocyfrowej godziny itp., Aby można go było używać w skryptach:
Wydajność:
źródło
Dzięki pomocy z góry ... Właśnie tego używam:
Następnie mam dzienniki wywoływane w zadaniach Robocopy w następujący sposób:
Istnieje wiele takich:
Kończy pracę z tym:
COMPLETE_LOG_2018-06-27_10_53_54.log
to plik utworzony na końcu i można go sortować według nazwy pliku.źródło
Odpowiedź Jessego rozwiązała mój problem zmiany nazwy pliku, eliminując spację w polu godziny. Oto jak ustawiam moje zmienne:
Działa jak mistrz; z jakiegoś powodu data nie wymagała takiego samego traktowania, ale myślę, że to zależy od ustawień regionalnych.
źródło
źródło
źródło