2012-06-14 11 views
12

मेरे पास एक बैच स्क्रिप्ट है जो फ़ाइल आउटपुट करती है, और मैं यह सुनिश्चित करने की कोशिश कर रहा हूं कि प्रत्येक बार स्क्रिप्ट निष्पादित हो जाने पर, कोई मौजूदा फाइल ओवरराइट नहीं की जाती है, इसलिए मैं टाइमस्टैम्प लगाने की कोशिश कर रहा हूं इस पर।विंडोज सीएमडी बैच स्क्रिप्ट में फ़ाइल नाम टाइमस्टैम्प

वर्तमान में मैं इस है:

set stamp=%DATE:/=-%_%TIME::=-% 

लेकिन अगर समय 1-9   AM है, यह की तरह कुछ देता है:

13-06-2012_ instead of a full 13-06-2012_12-39-37.28 

मैं इसे कैसे ठीक कर सकते हैं?

मैं Windows   7, और एक कमांड लाइन विंडो में echo %date% %time% के उत्पादन में उपयोग कर रहा हूँ ('लघु तारीख' के लिए मेरी घड़ी के प्रारूप 3 अक्षर महीने प्रदर्शित करने के लिए सेट कर दिया जाता) है:

03-Sep-12 9:06:21.54 

संपादित करें: मैं अब कुछ समय के लिए निम्न टाइमस्टैम्प का उपयोग कर रहा हूं, अच्छी तरह से काम करता है।

set timestamp=%DATE:/=-%_%TIME::=-% 
set timestamp=%timestamp: =% 

ऐसा लगता है कि एक टाइमस्टैम्प उत्पादित: 18-03-2013_13-37-43.26, %TIME% और %DATE% में / और : की जगह है, तो सफेद स्थान अलग करना द्वारा। व्हाइटस्पेस वास्तव में मेरे मूल प्रश्न में समस्या थी।

उत्तर

0

यह DD-MM-YYYY_HH-MM-SS.TT में पूरा समय चाहता है जहां टीटी टिक है। अपवाद यह सब कहता है।

9

स्टैक   ओवरफ्लो प्रश्न How to get current datetime on Windows command line, in a suitable format for using in a filename? देखें।

एक फ़ाइल, date.bat बनाएँ:

@echo off 
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b) 
For /f "tokens=1-3 delims=/:/ " %%a in ('time /t') do (set mytime=%%a-%%b-%%c) 
set mytime=%mytime: =% 
echo %mydate%_%mytime% 

भागो date.bat:

C:\>date.bat 
2012-06-14_12-47-PM 

अद्यतन:

तुम भी एक पंक्ति इस तरह से यह कर सकते हैं:

for /f "tokens=2-8 delims=.:/ " %%a in ("%date% %time%") do set DateNtime=%%c-%%a-%%b_%%d-%%e-%%f.%%g

+1

खेद है कि एक अमान्य तिथि भी वापस आती है, मुझे '-06-2012_01' – bryc

+0

मिला है मैंने एक संपादन किया है। इसे 2012-06-14_12-47-पीएम –

+2

होने के लिए ठीक करना चाहिए क्यों न सिर्फ यह एक पंक्ति पर करें? 'for/f" टोकन = 2-8 delims =।:/"%% a in ("% date%% time% ") दिनांक दिनांक = %% सी - %% सेट करें - %% बी _ %% डी-% % e-%% f। %% g' यह उदाहरण 12 घंटे + AM/PM के बजाय 24 घंटे की घड़ी का उपयोग करता है, और इसमें मिलीसेकंड शामिल हैं। यदि आप मिलिसेकंड नहीं चाहते हैं, तो बस '%% जी' का उपयोग न करें। –

0

an answer to Stack Overflow quesion Creating a file name as a timestamp in a batch job पर धन्यवाद, मैंने पाया कि यह फ़ाइल नाम को समाप्त करने वाला एक स्थान था।

+1

पर दिया है, ऊपर दी गई मेरी स्क्रिप्ट उस स्थान को खत्म करने के लिए इस 'सेट mytime =% mytime: = %' का उपयोग करती है। –

+1

आप कॉलम और रिक्त स्थान दोनों को delimiters 'delims =:" के रूप में सेट कर सकते हैं और यह अंतरिक्ष को अनदेखा कर देगा। –

0
for /f "tokens=2-8 delims=.:/ " %%a in ("%date% %time: =0%") do set DateNtime=%%c-%%a-%%b_%%d-%%e-%%f.%%g 
echo %DateNtime% 

या, कमांड लाइन से:

for /f "tokens=2-8 delims=.:/ " %a in ("%date% %time: =0%") do echo %c-%a-%b_%d-%e-%f.%g 

संपादित करें: ब्राइस के अमानक समय/तारीख चश्मा के अनुसार।(03-Sep-12 9:06:21.54)

@echo off 
setlocal enabledelayedexpansion 
for /f "tokens=1-7 delims=.:/- " %%a in ("%date% %time%") do (
    if "%%b"=="Jan" set MM=01 
    if "%%b"=="Feb" set MM=02 
    if "%%b"=="Mar" set MM=03 
    if "%%b"=="Apr" set MM=04 
    if "%%b"=="May" set MM=05 
    if "%%b"=="Jun" set MM=06 
    if "%%b"=="Jul" set MM=07 
    if "%%b"=="Aug" set MM=08 
    if "%%b"=="Sep" set MM=09 
    if "%%b"=="Oct" set MM=10 
    if "%%b"=="Nov" set MM=11 
    if "%%b"=="Dec" set MM=12 
    set HH=0%%d 
    set HH=!HH:~-2! 
    echo 20%%c-!MM!-%%a_!HH!-%%e-%%f.%%g 
) 
endlocal 
12

पहले चार इस कोड की पंक्तियों XP प्रो और उच्च में विश्वसनीय YY DD MM YYYY HH मिन सेक चर WMIC का उपयोग कर दूंगा,।

@echo off 
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%" 
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" 

set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%" 
set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%" 
echo datestamp: "%datestamp%" 
echo timestamp: "%timestamp%" 
echo fullstamp: "%fullstamp%" 
pause 
0

अतीत में, मैं एक .cmd स्क्रिप्ट मैं इंटरनेट पर पाया उपयोग किया है। मुझे स्थानीयकरण सामान्य रूप से तारीखों के साथ गड़बड़ करने के तरीके से नफरत है। जब भी आप आईएसओ में (कहीं और या, यदि मैं इतना बोल्ड हो सकता है) फ़ाइल नामों में तिथि होती है मैं समझ चाहते हैं उन्हें 8601 प्रारूप:

2015-02-19T14: 54: 51Z

या कुछ और है कि इसी क्रम में YMDHM, जैसे

2015-02-19 14:54

क्योंकि यह MDY/DMY अस्पष्टता को ठीक करता है और क्योंकि यह पाठ के रूप में sortable है।

मुझे नहीं पता कि मुझे यह कहां मिला। सीएमडी स्क्रिप्ट, लेकिन यह http://ss64.com/nt/syntax-getdate.html हो सकता है, जो मेरे वाई वाई वाई वाई-एमएम-डीडी विंडोज 8.1 पर और विंडोज 7 के वाई/डी/वाई वाई वाई वाई वैनिला इंस्टॉलेशन पर खूबसूरती से काम करता है।

2015-02-09 04:43

2

यहाँ एक बैच स्क्रिप्ट मैं एक टाइमस्टैम्प वापस जाने के लिए बनाया गया है: दोनों एक ही प्रारूप दे। फ़ील्ड डेलीमीटर के रूप में उपयोग करने के लिए एक वैकल्पिक पहला तर्क प्रदान किया जा सकता है। उदाहरण के लिए:

c: \ sys \ tmp> timestamp.bat
20160404_144741
c: \ sys \ tmp> timestamp.bat -
2016-04-04_14-45-25
c: \ sys \ tmp> timestamp.bat:
2016: 04: 04_14: 45: 29

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 
:: put your desired field delimiter here. 
:: for example, setting DELIMITER to a hyphen will separate fields like so: 
:: yyyy-MM-dd_hh-mm-ss 
:: 
:: setting DELIMITER to nothing will output like so: 
:: yyyyMMdd_hhmmss 
:: 
SET DELIMITER=%1 

SET DATESTRING=%date:~-4,4%%DELIMITER%%date:~-7,2%%DELIMITER%%date:~-10,2% 
SET TIMESTRING=%TIME% 
::TRIM OFF the LAST 3 characters of TIMESTRING, which is the decimal point and hundredths of a second 
set TIMESTRING=%TIMESTRING:~0,-3% 

:: Replace colons from TIMESTRING with DELIMITER 
SET TIMESTRING=%TIMESTRING::=!DELIMITER!% 

:: if there is a preceeding space substitute with a zero 
echo %DATESTRING%_%TIMESTRING: =0% 
0

विंडोज बैच 2018-02-08_14.32.06.34.log प्रारूप में लॉग फ़ाइल नाम:

setlocal 
set d=%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2% 
set t=%time::=.% 
set t=%t: =% 
set logfile="%d%_%t%.log" 

ping localhost -n 11>%1/%logfile% 
endlocal