2012-06-14 26 views
12

Tôi có tập lệnh batch xuất ra tệp và tôi đang cố gắng đảm bảo rằng mỗi lần tập lệnh được thực thi, không có tệp nào bị ghi đè, vì vậy tôi đang cố gắng đặt dấu thời gian trên đó.Dấu thời gian tên tập tin trong kịch bản lệnh Windows CMD

Hiện nay tôi có điều này:

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

Nhưng nếu thời gian là 1-9   AM, nó mang lại một cái gì đó như:

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

Làm thế nào tôi có thể sửa lỗi này?

Tôi đang sử dụng Windows 7  , và đầu ra của echo %date% %time% trong một cửa sổ dòng lệnh được (định dạng đồng hồ của tôi cho 'ngày ngắn' được thiết lập để hiển thị tháng 3 chữ cái):

03-Sep-12 9:06:21.54 

Chỉnh sửa: Tôi đã sử dụng dấu thời gian sau đây cho một thời điểm tốt, hoạt động tốt.

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

Nó đã tạo ra một dấu thời gian như: 18-03-2013_13-37-43.26, bằng cách thay thế /: trong %TIME%%DATE%, sau đó tước khoảng trắng. Khoảng trắng là vấn đề trong câu hỏi ban đầu của tôi, thực sự.

Trả lời

0

Nó muốn toàn bộ thời gian ở DD-MM-YYYY_HH-MM-SS.TT trong đó TT là bọ ve. Ngoại lệ nói lên tất cả.

9

Xem ngăn xếp   Câu hỏi tràn How to get current datetime on Windows command line, in a suitable format for using in a filename?.

Tạo một tập tin, 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% 

Run date.bat:

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

UPDATE:

Bạn cũng có thể làm điều đó với một dòng như thế này:

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

+1

xin lỗi dường như cũng trả lại ngày không hợp lệ, tôi đã nhận được '-06-2012_01' – bryc

+0

Tôi đã chỉnh sửa. Điều này sẽ sửa chữa nó là 2012-06-14_12-47-PM –

+2

Tại sao không chỉ làm tất cả trên một dòng? 'for/f" tokens = 2-8 delims =.:/"%% a in ("% date%% time% ") đặt DateNtime = %% c - %% a - %% b _ %% d-% % e - %% f. %% g' Ví dụ này sử dụng đồng hồ 24 giờ thay vì 12 giờ + sáng/chiều và bao gồm mili giây. Nếu bạn không muốn các miliseconds, chỉ cần không sử dụng '%% g'. –

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

Hoặc, từ dòng lệnh:

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

EDIT: Theo thông số kỹ thuật phi tiêu chuẩn lần/ngày Bryce.(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

Bốn dòng đầu tiên của mã này sẽ cung cấp cho bạn đáng tin cậy biến YY DD MM YYYY HH Min Sec trong XP Pro và cao hơn, sử dụng 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

Trước đây, tôi đã sử dụng tập lệnh .cmd mà tôi tìm thấy trên Internet. Tôi ghét cách địa phương hóa thường lộn xộn với ngày tháng. Bất cứ lúc nào bạn có ngày tháng trong tên tập tin (hoặc bất cứ nơi nào khác, nếu tôi có thể quá đậm) Tôi tìm bạn muốn họ trong định dạng ISO 8601:

2015-02-19T14: 54: 51Z

hay cái gì khác mà có YMDHM theo thứ tự đó, chẳng hạn như

2015-02-19 14:54

vì nó sửa chữa MDY/DMY mơ hồ và bởi vì nó có thể phân loại dưới dạng văn bản.

Tôi không biết nơi tôi có tập lệnh .cmd đó, nhưng có thể là http://ss64.com/nt/syntax-getdate.html, hoạt động tốt trên YYYY-MM-DD Windows 8.1 của tôi và cài đặt v/D/YYYY vani của Windows 7. Cả hai đều có cùng định dạng:

2015-02-09 04:43

2

Đây là tập lệnh theo lô mà tôi đã tạo để trả về dấu thời gian. Đối số đầu tiên tùy chọn có thể được cung cấp để được sử dụng làm dấu phân tách trường. Ví dụ:

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

của Windows loạt tên file log ở định dạng 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 
Các vấn đề liên quan