Sử dụng Ngày và Giờ trong một tệp bó để tạo tên tệp


20

Tôi đang chạy một chương trình từ một tệp bó, khi nó được thực hiện sẽ tự động sao lưu cơ sở dữ liệu MySQL của tôi.

Tôi muốn tệp bó tạo ra một bản sao lưu khác nhau cho mỗi lần chạy, để tôi có thể quay lại.

Tên tệp mong muốn sẽ là gnucash_shockwave-20121128210344.sql (Định dạng ngày YYYY-MM-DD-HH-MM-SS)

Tôi đã googled một vài điều nói thử %DATE:~4%%Date.Year%nhưng tôi nhận được một lỗi nóiThe system cannot find the specified path.

Nếu tôi loại bỏ nỗ lực đánh dấu thời gian, tập lệnh sẽ hoạt động tốt, nhưng ghi lại bản sao lưu trước đó

Đây là phần mã tôi đang nói đến:

@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!

Bất kỳ đề xuất?


Tôi đã liên kết lại các tài khoản của bạn, bạn sẽ có thể đăng nhập và nhận xét về bài đăng và câu trả lời của riêng bạn cho câu hỏi của bạn ngay bây giờ.
slhck

slhck, lol cảm ơn tôi đã tự hỏi chuyện gì đang xảy ra sau đó tôi nhớ rằng tôi đã không ở trong stack tràn lol
chàng trai từ

thay thế% ngày% bằng% ngày: ~ 6,4% -% ngày: ~ 3,2% -% ngày: ~ 0,2% đã hoạt động
MagTun

Câu trả lời:


28

Định dạng Ngày và Giờ tùy thuộc vào nội dung bạn đã chỉ định trong tiểu dụng Bảng điều khiển Ngôn ngữ và Vùng .

Chạy tệp bó sau (giả sử dd / mm / yyyyhh: mm: ss ) và sửa đổi trích xuất chuỗi con (sử dụng các ký tự: và ~) theo yêu cầu để có được các phần thích hợp từ cả hai chuỗi Ngày và Giờ:

@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%

Để được trợ giúp thêm về trích xuất chuỗi con, gõ set /?vào dấu nhắc lệnh hoặc xem trang này .


Cảm ơn, tôi nghĩ rằng tôi hiểu làm thế nào bây giờ làm việc. Tôi không ở văn phòng, nhưng sẽ thử ngay khi tôi đến đó và gửi lại. Chúng tôi đang sử dụng Windows 8 Cảm ơn sự giúp đỡ
chàng trai từ

Có nó, Phải điều chỉnh các vị trí chuỗi của ngày, có thể là do vị trí và ngôn ngữ của tôi nhưng điều đó đã lừa! Cảm ơn rât nhiều!
chàng trai từ

Để có được ngày độc lập với miền địa phương, hãy sử dụng wmic thay thế
phuclv

Giải pháp này có thể cung cấp cho bạn kết quả khác nhau trên các máy khác nhau.
Mehdi Dehghani

Tôi nghĩ rằng một cái gì đó thay đổi với đầu ra ngày, tôi có > echo yyyy = %DATE:~6,4%thể sản xuất yyyy = /20/. Tuy nhiên echo yyyy = %DATE:~10,4%là vậy yyyy = 2019.
teeks99

7

Đây là những gì làm việc cho tôi.

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
Chào mừng bạn đến với Siêu người dùng! Bạn có thể vui lòng chỉnh sửa câu trả lời của bạn để bao gồm một số giải thích về những gì lệnh của bạn làm?
Xuất sắc

Bạn đang trả lời sai câu hỏi. Câu hỏi của OP yêu cầu YYYYMMDD; câu trả lời này mang lại cho MMDDYYYY.
Scott

không có gì giống như đến Stack với một câu hỏi và có câu trả lời hoàn hảo chỉ ngồi đó chờ đợi để tiết kiệm một ngày cho tôi. Cảm ơn rất nhiều @abbs và Excelll
clockwiseq

3

Với một chút tinh chỉnh tôi đã nhận được điều này

@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


Kết quả:

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


Làm thế nào để điều này khác với các câu trả lời khác?
suspectus

@suspectus: Câu trả lời này khác với câu trả lời của abbs ở chỗ abbs giả định Vùng Hoa Kỳ (tức là miền địa phương), trong đó %DATE%~ Ddd MM/DD/YYYY, trong khi câu trả lời này giả định Vùng không thuộc Hoa Kỳ, trong đó %DATE%~ DD/MM/YYYY(không có ngày trong tuần). Và câu hỏi này khác với câu trả lời của Karan ở chỗ câu này sai - câu hỏi yêu cầu YYYYMMDD; câu trả lời này mang lại cho DD_MMTHER YYYY.
Scott

2

Xin lỗi vì sự chậm trễ ...

Cách đáng tin cậy duy nhất để có được ngày thích hợp cho bất kỳ cài đặt khu vực nào là giải pháp của 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

Tôi nghĩ rằng điều này cải thiện @Nick Rogers trả lời một chút.

EX: với định vị tiếng Đức (de_DE), có một khoảng trắng hàng đầu vào giờ dưới 10.

Ngoài ra tôi muốn có một số không hàng đầu vào giờ. "echo -! ^ _ hh! -" cho "09" thay vì chỉ "9"

Vì vậy, tôi phá vỡ mã trong hai phần để đọc tốt hơn. ví dụ này phải phù hợp với nhiều địa phương hơn.

+ tiền thưởng: _ms = mili giây hoặc bất cứ hai chữ số cuối là gì (-;

nhận xét: đôi khi GIỜ cần được thoát, xem mã bên trong

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

đầu ra: echo fullTime = 15062018-10182821


0

câu trả lời ngắn nhất (linh hoạt nhất?) là theo tập lệnh TimeStamp.cmd sau đây chỉ chứa ba dòng mã (không bao gồm nhận xét, v.v.) ...

@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%"

Lưu ý sự cần thiết phải sử dụng %% thay vì% cho biến trong câu lệnh FOR trong tệp bó

... năng suất thực hiện (dòng trống và nhận xét đã bị xóa) ...

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"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.