Bạn phải cẩn thận với những gì bạn muốn làm, bởi vì nó không chỉ là về để có được thời gian.
Lô có các biến nội bộ để biểu thị ngày và giờ: % DATE%% TIME%. Nhưng chúng phụ thuộc vào Windows Locale.
% ngày%:
- dd.MM.yyyy
- DD.MM.YY
- dMyy
- dd/MM/yy
- yyyy-MM-dd
% TIME% :
- H: mm: ss, msec
- HH: mm: ss, msec
Bây giờ, bao lâu kịch bản của bạn sẽ làm việc và khi nào? Ví dụ, nếu nó sẽ dài hơn một ngày và không vượt qua nửa đêm nó chắc chắn sẽ sai, bởi vì sự khác biệt giữa 2 dấu thời gian giữa nửa đêm là một giá trị âm! Bạn cần ngày để tìm ra khoảng cách chính xác giữa các ngày, nhưng làm thế nào bạn làm điều đó nếu định dạng ngày không phải là một hằng số? Những thứ có % DATE% và % TIME% có thể trở nên tồi tệ hơn và tồi tệ hơn nếu bạn tiếp tục sử dụng chúng cho mục đích toán học.
Lý do là % NGÀY% và % TIME% là chỉ tồn tại là để hiển thị ngày tháng và thời gian để sử dụng trong sản xuất, chứ không phải để sử dụng chúng để tính toán. Vì vậy, nếu bạn muốn tạo khoảng cách chính xác giữa một số giá trị thời gian hoặc tạo một số giá trị duy nhất tùy thuộc vào ngày và giờ thì bạn phải sử dụng một cái gì đó khác và chính xác hơn % DATE% và % TIME%.
Tôi đang sử dụng các cửa sổ wmic BUILTIN tiện ích để yêu cầu điều đó (đặt nó trong một tập tin script):
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE`) do if "%%i" == "LocalDateTime" echo.%%j
hoặc gõ từ đúng vào cmd.exe console:
for /F "usebackq tokens=1,2 delims==" %i in (`wmic os get LocalDateTime /VALUE`) do @if "%i" == "LocalDateTime" echo.%j
Các bất lợi của điều này là một hiệu suất chậm trong trường hợp các cuộc gọi thường xuyên. Trên máy của tôi nó là khoảng 12 cuộc gọi mỗi giây.
Nếu bạn muốn tiếp tục sử dụng này thì bạn có thể viết một cái gì đó như thế này (get_datetime.bat):
@echo off
rem Description:
rem Independent to Windows locale date/time request.
rem Drop last error level
cd .
rem drop return value
set "RETURN_VALUE="
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if "%%i" == "LocalDateTime" set "RETURN_VALUE=%%j"
if not "%RETURN_VALUE%" == "" (
set "RETURN_VALUE=%RETURN_VALUE:~0,18%"
exit /b 0
)
exit /b 1
Bây giờ, bạn có thể phân tích % RETURN_VALUE% somethere trong kịch bản của bạn:
call get_datetime.bat
set "FILE_SUFFIX=%RETURN_VALUE:.=_%"
set "FILE_SUFFIX=%FILE_SUFFIX:~8,2%_%FILE_SUFFIX:~10,2%_%FILE_SUFFIX:~12,6%"
echo.%FILE_SUFFIX%
Trên máy của tôi, nó hiển thị cùng một lúc ngay cả khi tôi ngủ giữa các cuộc gọi. –
Bạn có thể đăng mã cho tập tin thực thi mà bạn đang cố gắng để hồ sơ? –
nm, tôi là một thằng ngốc. :) –