Tệp hàng loạt không hoạt động khi sử dụng dấu thời gian trên win server 2008 r2


2

Tôi sử dụng lệnh này trong tệp bó để thêm dấu thời gian vào tệp:

copy C:\1\1.txt C:\1\Log_%date:~10,4%-%date:~4,2%-%date:~7,2%_%time:~0,2%.%time:~3,2%.%time:~6,2%.txt

Nó hoạt động tốt trên máy chủ windows 2008 R2 nhưng nó không hoạt động trên một thiết bị khác có cùng hệ điều hành (2008 R2).

Tôi đã thử một kịch bản khác:

@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a
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 stamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%
copy "C:\1\1.txt" "C:\1\Log_ %stamp%.txt

Nó hoạt động tốt trên cả hai máy chủ nhưng đầu ra khác nhau:

Máy chủ có vấn đề:

Log_ ~0,4-~4,2-~6,2_~8,2-~10,2-~12,2.txt 

Máy chủ khác:

Log_ 2017-06-04_12-50-07.txt

màn hình in của máy chủ bị lỗi không có vấn đề gì trong WMI trên máy chủ bị lỗi @DavidPostill
Mohamed Tag

Có lẽ trên mỗi máy chủ, bạn chỉ cần vào một dấu nhắc lệnh và nhập vào ECHO %date% và họ xác nhận kết quả định dạng bạn nhận được trên cả hai có giống nhau hay không. Có lẽ cài đặt định dạng thời gian là khác nhau giữa hai máy chủ và đó là lý do tại sao bạn có sự không nhất quán. Vì vậy, chỉ cần làm điều đó và xem những gì bạn xác định. Nếu chúng là các định dạng khác nhau, thì hãy thay đổi định dạng để khớp với định dạng hoạt động và sau đó sử dụng cùng một tập lệnh, ví dụ: %date:~10,4%-%date:~4,2%-%date:~7,2%_%time:~0,2%.%time:~3,2%.%time:~6,2% và được thực hiện với nó.
Pimp Juice IT

@MohamedTag Rõ ràng là có chỉ định bởi ERROR: Code = 0x80020009 Description = Exception occurred. Facility = Dispatch thông báo lỗi.
DavidPostill

Câu trả lời:


0

Nó hoạt động tốt trên cả hai máy chủ nhưng đầu ra khác nhau

Hãy thử tệp bó sau (đây là cách chính xác để phân tích đầu ra thời gian cục bộ từ wmic ):

@echo off
setlocal
rem use findstr to strip blank lines from wmic output
for /f "usebackq skip=1 tokens=1-6" %%g in (`wmic Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year ^| findstr /r /v "^$"`) do (
  set _day=00%%g
  set _hours=00%%h
  set _minutes=00%%i
  set _month=00%%j
  set _seconds=00%%k
  set _year=%%l
  )
rem pad with leading zeros
set _month=%_month:~-2%
set _day=%_day:~-2%
set _hh=%_hours:~-2%
set _mm=%_minutes:~-2%
set _ss=%_seconds:~-2%
set _stamp=%_year%%_month%%_day%%_hh%%_mm%%_ss%
copy "C:\1\1.txt" "C:\1\Log_ %_stamp%.txt"
endlocal

Mã này vẫn không thành công trên một máy chủ cụ thể, với mã lỗi 0x80020009

Z:\>wmic Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year ERROR: Code = 0x80020009 Description = Exception occurred. Facility = Dispatch

Mã lỗi 80041002 chỉ ra kho lưu trữ wmi bị thiếu hoặc bị hỏng trên máy bị lỗi.

Chìa khóa để giải quyết vấn đề ở đây là mã lỗi 80041002, trong đó trong thuật ngữ WMI có nghĩa là không thể tìm thấy đối tượng . Cụ thể, đây là hệ thống con COM / OLE cho WMI (còn gọi là WBEM) phàn nàn rằng nó không thể tìm thấy lớp hoặc giá trị WMI được yêu cầu.

Giải pháp là sửa lỗi kho lưu trữ WMI:

Cách sửa lỗi kho lưu trữ WMI bị thiếu hoặc bị hỏng

Để sửa lỗi kho lưu trữ WMI bị hỏng, trước tiên hãy chạy kiểm tra đĩa   ( chkdsk ) để đảm bảo rằng tham nhũng không ở mức lưu trữ.   Diệmuh. Tiếp theo, hãy kiểm tra xem phần đính kèm Điều khiển WMI có thực sự có   khó khăn trong việc kết nối với WMI; cần khiếu nại về ‘Không thể   khởi tạo tất cả các lớp WMI cần thiết

enter image description here

Sau đó chọn một trong ba loại bản sửa lỗi cho kho lưu trữ WMI bị hỏng:   đơn giản, bẩn thỉu hoặc đáng sợ:

  • Đơn giản: chạy winmgmt /salvagerepository chống lại kho lưu trữ WMI cục bộ
  • Sordid: khôi phục kho lưu trữ WMI từ bản sao lưu WMI (nếu bạn có)
  • Scary: cài đặt lại Windows từ đĩa cứu hộ

Nguồn Đầu bếp trên Windows - phát hiện và khắc phục các sự cố WMI ngăn các đầu bếp-khách hàng chạy


Đọc thêm

  • Chỉ mục A-Z của dòng lệnh Windows CMD - Một tài liệu tham khảo tuyệt vời cho tất cả những thứ liên quan đến dòng cmd Windows.
  • cho / f - Lệnh loop chống lại kết quả của lệnh khác.
  • hẹn gặp - Hiển thị ngày và giờ độc lập với Địa điểm, Ngôn ngữ hoặc định dạng ngày của người dùng đã chọn (Bảng điều khiển / Vùng).
  • biến - Trích xuất một phần của một biến (chuỗi con).
  • vũ trụ - Lệnh thiết bị quản lý Windows.

tôi đã thử tập lệnh của bạn và cho tôi đầu ra này (Log_ ~ -2 ~ -2 ~ -2 ~ -2 ~ -2.txt) và tập lệnh tương tự hoạt động tốt trên thiết bị khác và đây là vấn đề
Mohamed Tag

@MohamedTag Tôi nhận thấy có một mất tích " sau C:\1\Log_ %_stamp%.txt (trả lời đúng). Điều đó có sửa được không?
DavidPostill

Đầu ra của wmic Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year trên máy bị lỗi?
DavidPostill

. ) trên tất cả các thiết bị khác
Mohamed Tag

@MohamedTag Sau đó, tập lệnh của bạn bị hỏng. Có một khoảng trắng trong tên tệp đích và dấu ngoặc kép không khớp.
DavidPostill

0

Tôi nghĩ vấn đề không liên quan đến lô mà Mohamed đang sử dụng.

DavidPostill quả quyết (which is the correct way to parse the local time output from wmic) ít nhất là nghi ngờ. Không có một cách chính xác. IMO không có ích để có được các yếu tố ngày / giờ duy nhất và nhét các số 0 đứng đầu sau đó.

Bạn sẽ nhận được cùng một đầu ra thất bại nếu var dt không phải xác định. Vì vậy

  • đã xảy ra lỗi khi chuyển lô sang máy chủ khác hoặc
  • cũng như dòng đơn bị lỗi với các biến nội bộ %date%%time% nó có thể là một sai cmd.exe trong con đường được tham gia.

Không cần phải đặt các yếu tố ngày / giờ vào bình trước khi lắp ráp stamp

@Echo off
For /f "delims=." %%D in ('wmic OS Get localdatetime ^| find "."') Do "Set dt=%%D"
Set stamp=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2%
Echo copy "C:\1\1.txt" "C:\1\Log_%stamp%.txt

Echo ở dòng cuối cùng tránh được lỗi trong khi kiểm tra, loại bỏ nó khi đầu ra có vẻ ổn.


Điều đó không giải thích ERROR: Code = 0x80020009 Description = Exception occurred. Facility = Dispatch trên máy chủ bị lỗi.
DavidPostill
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.