Câu hỏi Ngày Echo CMD nhưng hiển thị tháng dưới dạng chuỗi


Tôi đang sử dụng lệnh robocopy để tạo ra một hệ thống sao lưu, tôi đã quản lý thành công để sao chép các thư mục, nhưng con dấu ngày là sai. Các thư mục được bắt đầu bằng ngày tháng và thời gian.

Lệnh robocopy là:

robocopy U:\Data\  X:\Private\Backups\FolderName_%date:/=-%-(%time::=-%) /e

Các thư mục được hiển thị như thế này:

FolderName_09-11-2013- (20-24-06,60)

Điều duy nhất tôi muốn thay đổi là ngày, tôi muốn hiển thị tháng dưới dạng chuỗi chỉ có 3 ký tự đầu tiên như tháng 10.

Ai đó có thể hướng dẫn tôi. Cảm ơn.


0
2017-11-09 20:26


gốc




Các câu trả lời:


Xin lưu ý rằng việc sử dụng %date% là phiên bản Windows và vùng phụ thuộc. Mỗi ngôn ngữ / khu vực có cài đặt riêng và người dùng cũng có thể thay đổi cài đặt này. Không thực sự là một cách đáng tin cậy để có được ngày.

Cách hiệu quả nhất để có được ngày chính xác là wmic OS Get localdatetime. Tôi không chắc chắn nếu bạn có thể nhận được tên tháng theo cùng một cách như vậy ở đây tôi chỉ cần sử dụng một số if-báo cáo để có được tên tháng:

@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set year=%dt:~0,4%
set month=%dt:~4,2%
set day=%dt:~6,2%
if %month%==01 set month=jan
if %month%==02 set month=feb
if %month%==03 set month=mar
if %month%==04 set month=apr
if %month%==05 set month=may
if %month%==06 set month=jun
if %month%==07 set month=jul
if %month%==08 set month=aug
if %month%==09 set month=sep
if %month%==10 set month=oct
if %month%==11 set month=nov
if %month%==12 set month=dec
robocopy U:\Data\  X:\Private\Backups\FolderName_%day%-%month%-%year%-(%time::=-%) /e

Tôi biết nó không phải là "một lót" nhưng tôi nghĩ đó là cách đáng tin cậy nhất để có được ngày.


3
2017-11-09 21:18





Kịch bản lệnh ngắn này sẽ thực hiện tương tự như trên mà không có câu lệnh IF.

@echo off &setlocal
for /f "tokens=2*" %%a in ('reg query "HKCU\Control Panel\International" /v sShortDate^|find "REG_SZ"') do set "ssShortDate=%%b"
reg add "HKCU\Control Panel\International" /f /v sShortDate /d "ddd MMM" >nul
set "dowlm=%date:~4,3%
echo %dowlm%
endlocal

-1
2017-09-08 12:46