फ़ाइल नाम बनाने के लिए बैच फ़ाइल में दिनांक और समय का उपयोग करना


20

मैं एक बैच फ़ाइल से एक कार्यक्रम चला रहा हूं, जब यह किया जाता है तो मेरे MySQL डेटाबेस का एक स्वचालित बैकअप करता है।

मैं चाहूंगा कि बैच फ़ाइल प्रत्येक रन के लिए एक अलग बैक अप बनाए, इसलिए मैं बैकट्रेस कर सकता हूं।

वांछित फ़ाइल नाम gnucash_shockwave-20121128210344.sql (दिनांक प्रारूप YYYY-MM-DD-HH-MM-SS) होगा

मैं कुछ चीजें हैं जो कहा की कोशिश googled है %DATE:~4%और %Date.Year%लेकिन मुझे एक त्रुटि मिलेगा जिसमें बताया गयाThe system cannot find the specified path.

अगर मैं इसे टाइमस्टैम्प करने के प्रयास को हटा देता हूं, तो स्क्रिप्ट ठीक काम करती है, लेकिन पिछले बैकअप को लिखती है

यहाँ कोड का वह भाग है जिसके बारे में मैं बात कर रहा हूँ:

@REM *** EXECUTION ***
echo. Starting backup...
SET timestamp %DATE:~-4%%DATE:~4,2%%DATE:~7,2%%TIME%
%mysqldir%\mysqldump -u %mysqluser% -p%mysqlpassword% -h %mysqlhost% -P %mysqlport% --databases --routines --verbose gnucash_shockwave > %BackupDir%\gnucash_shockwave-%timestamp%.sql

echo.------------------------------------------------------
echo. Backup complete!

कोई सुझाव?


मैंने आपके खातों को पुनः प्राप्त कर लिया है, आपको अपने स्वयं के पोस्ट और अपने सवालों के जवाब में लॉग इन करने और टिप्पणी करने में सक्षम होना चाहिए।
slhck

slhck, lol धन्यवाद मैं सोच रहा था कि तब क्या चल रहा था मुझे याद आया कि मैं स्टैक ओवरफ्लो नहीं था
manfromfl

% तारीख से%% की जगह: ~ 6,4% -% तारीख: ~ 3,2% -% तारीख: ~ 0,2% ने काम किया
MagTun

जवाबों:


27

दिनांक और समय प्रारूप इस बात पर निर्भर करता है कि आपने क्षेत्र और भाषा नियंत्रण कक्ष एप्लेट में क्या निर्दिष्ट किया है।

निम्न बैच फ़ाइल (जो dd / mm / yyyy और hh: mm: ss मानती है) चलाएँ और दिनांक और समय स्ट्रिंग्स दोनों से उचित भागों को प्राप्त करने के लिए आवश्यक निष्कर्षण (: और ~ वर्णों का उपयोग करके) को संशोधित करें:

@echo off
cls
echo Date format = %date%
echo dd = %date:~0,2%
echo mm = %date:~3,2%
echo yyyy = %date:~6,4%
echo.
echo Time format = %time%
echo hh = %time:~0,2%
echo mm = %time:~3,2%
echo ss = %time:~6,2%
echo.
echo Timestamp = %date:~6,4%-%date:~3,2%-%date:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%

निष्कर्षण निष्कर्षण पर अधिक मदद के लिए, set /?कमांड प्रॉम्प्ट पर टाइप करें या इस पृष्ठ को देखें ।


धन्यवाद, मुझे लगता है कि मैं समझता हूं कि यह कैसे काम कर रहा है। मैं कार्यालय में नहीं हूं, लेकिन कोशिश करूंगा कि जैसे ही मैं वहां पहुंचूं और वापस पोस्ट करूं। हम मदद के लिए विंडोज 8 धन्यवाद का उपयोग कर रहे हैं
manfromfl

मिल गया, तारीख के स्ट्रिंग स्थानों को ट्विक करना था, शायद मेरे स्थान और भाषा के कारण लेकिन इसने चाल चली! आपका बहुत बहुत धन्यवाद!
3

स्थान-स्वतंत्र तारीख उपयोग प्राप्त करने के लिए WMIC बजाय
phuclv

यह समाधान आपको विभिन्न मशीनों पर अलग-अलग परिणाम दे सकता है।
मेहदी देहनागी

1
मुझे लगता है कि तारीख आउटपुट के साथ कुछ बदल गया है, मुझे > echo yyyy = %DATE:~6,4%उत्पादन करना है yyyy = /20/। हालाँकि echo yyyy = %DATE:~10,4%है yyyy = 2019
teeks99

7

यहाँ मेरे लिए क्या काम किया है।

Format - mmddyyyy_HHMMSS

echo %DATE% %TIME%

Date format = Thu 03/05/2015 15:48:26.22

echo mm = %date:~4,2%

echo dd = %date:~7,2%

echo yyyy = %date:~10,4%

echo Timestamp = %date:~4,2%%date:~7,2%%date:~10,4%_%time:~0,2%%time:~3,2%%time:~6,2%

Timestamp - 03052015_154013

3
सुपर उपयोगकर्ता में आपका स्वागत है! क्या आप अपने जवाब को संपादित करने के लिए अपने आदेशों के कुछ स्पष्टीकरण शामिल कर सकते हैं?
एक्सेल

आप गलत सवाल का जवाब दे रहे हैं। OP का प्रश्न YYYYMMDD के लिए पूछता है; यह उत्तर MMDDYYYY देता है।
स्कॉट

एक सवाल के साथ स्टैक आने और एकदम सही जवाब देने जैसा कुछ भी नहीं है, जो मेरे लिए दिन बचाने के लिए इंतजार कर रहा है। बहुत बहुत धन्यवाद @abbs और Excelll
दक्षिणावर्त

3

थोड़ा ट्विकिंग के साथ मुझे यह मिला

@echo off
cls
echo Date format = %date%
echo dd = %date:~0,2%
echo mm = %date:~3,2%
echo yyyy = %date:~6,8%
echo.
echo Time format = %time%
echo hh = %time:~0,2%
echo mm = %time:~3,2%
echo ss = %time:~6,2%
echo.
echo Timestamp = %date:~0,2%_%date:~3,2%_%date:~6,8%-%time:~0,2%_%time:~3,2%_%time:~6,2%
ECHO "TEST..." > test-%date:~0,2%_%date:~3,2%_%date:~6,8%-%time:~0,2%_%time:~3,2%_%time:~6,2%.txt


परिणाम:

"test-do_25_06-2015-22_21_51.txt" (Thursday_25th_June_2015-22:21.51)


यह अन्य उत्तरों से कैसे भिन्न है?
सस्पेंस

@ सास्पेक्टस: यह उत्तर एब्स के अमेरिकी क्षेत्र (यानी, लोकल), जहां %DATE%~ है Ddd MM/DD/YYYY, के एब्स के जवाब से भिन्न है , जबकि यह एक गैर-अमेरिकी क्षेत्र मानता है, जहां %DATE%~ DD/MM/YYYY(सप्ताह के दिन के बिना)। और यह करण के जवाब से अलग है कि यह गलत है - सवाल YYYYMMDD के लिए पूछता है; यह उत्तर DD_MM-YYYY देता है।
स्कॉट

2

देरी के लिए खेद है ...

जो भी क्षेत्रीय सेटिंग हो, उचित तिथि प्राप्त करने का एकमात्र विश्वसनीय तरीका है foxidrive @ /programming/11037831/filename-timestamp-in-windows-cmd-batch-script

@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

1

मुझे लगता है कि यह सुधार करता है @ निक रोजर्स थोड़ा जवाब देते हैं।

EX: जर्मन डिटेक्ट (de_DE) के साथ 10 से नीचे के घंटों में एक प्रमुख व्हाट्सएप है।

मैं भी घंटे पर एक अग्रणी शून्य चाहता था। "इको -! ^ _ hh! -" केवल "9" के बजाय "09" देता है

इसलिए मैं बेहतर पढ़ने के लिए दो टुकड़ों में कोड को तोड़ता हूं। यह उदाहरण अधिक स्थानों से मेल खाना चाहिए।

+ बोनस: _ms = मिलीसेकंड या जो भी पिछले दो अंक हैं (-;

टिप्पणी: कभी-कभी HOUR को भाग जाने की आवश्यकता होती है, कोड के अंदर देखें

SETLOCAL
SETLOCAL EnableExtensions
SETLOCAL EnableDelayedExpansion
@ECHO ON
@rem use FOR /F to 'break out' the components of %DATE% and %TIME%, assuming 'yyyy/mm/dd' format date i.e.
@rem works also with german standard format dd.mm.yyyy

echo ----- date -----
    echo _%date%_
    for /F "tokens=1-3 delims=.-/" %%i IN ("%date%") DO Set "_Y=%%i"& Set "_M=%%j"& Set "_D=%%k"
    @rem Switch the year and day if appropriate
    IF "xx%_D:~2%" == "xx" Set "_Y=%_D%"& Set "_D=%_Y%"
    set __date=%_Y%%_M%%_D%
    echo _%__date%_
echo ----- date -----

echo ----- time -----
    echo _%time%_
    for /F "tokens=1-4 delims=:," %%l IN ("%time%") DO Set "_tmp_hh=%%l"& Set "_mm=%%m"& Set "_ss=%%n"& Set "_ms=%%o"
    @rem add leading zero to hour if necessary
    if %_tmp_hh% LSS 10 (set _hh=^0%_tmp_hh:~1,1%) ELSE (set _hh=%time:~0,2%)
    @rem sometimes the HOUR needs to be escaped, like this
    echo - !^_hh! -
    set __time=%_hh%%_mm%%_ss%%_ms%
    echo _%__time%_
echo ----- time -----

    Set fullTime=%_Y%%_M%%_D%-%_hh%%_mm%%_ss%%_ms%
    echo _%fullTime%_
pause

आउटपुट: इको फुलटाइम = 15062018-10182821


0

सबसे छोटा (सबसे बहुमुखी?) उत्तर निम्न टाइमस्टैम्प.cmd स्क्रिप्ट के अनुसार है जिसमें कोड की केवल तीन पंक्तियाँ हैं (टिप्पणियों आदि को छोड़कर)। ...

@ECHO ON
@REM use FOR /F to 'break out' the components of %DATE% and %TIME%, assuming 'yyyy/mm/dd' format date i.e.

    for /F "tokens=1-6* delims=.:-/ " %%i IN ("%DATE% %TIME%") DO Set "YYYY=%%i"& Set "MM=%%j"& Set "DD=%%k"& Set "HH=%%l"& Set "MI=%%m"& Set "SS=%%n"

@REM Switch the year and day if appropriate

    IF NOT "X%DD:~2%" == "X" Set "YYYY=%DD%"& Set "DD=%YYYY%"

    Set "TimeStamp=%YYYY%%MM%%DD%%HH%%MI%%SS%"

एक बैच फ़ाइल में फॉर स्टेटमेंट में वेरिएबल के लिए%% के बजाय %% का उपयोग करने की आवश्यकता पर ध्यान दें

... निष्पादन पैदावार (रिक्त लाइनें और टिप्पणियां हटा दी गईं) ...

C:\>timestamp.cmd
C:\>for /F "tokens=1-6* delims=.:-/ " %i IN ("2018/03/02 11:17:43.35") DO Set "YYYY=%i"  & Set "MM=%j"  & Set "DD=%k"  & Set "HH=%l"  & Set "MI=%m"  & Set "SS=%n"
C:\>Set "YYYY=2018"  & Set "MM=03"  & Set "DD=02"  & Set "HH=11"  & Set "MI=17"  & Set "SS=43"
C:\>IF NOT "X" == "X" Set "YYYY=02"  & Set "DD=2018"
C:\>Set "TimeStamp=20180302111743"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.