Пакетний файл не працює при використанні часової позначки на сервері win 2008 2008 р


2

Я використовую цю команду в пакетному файлі, щоб додати позначку часу до файлу:

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

Він добре працює на Windows Server 2008 R2, але він не працює на іншому пристрої з тією ж операційною системою (2008 R2).

Я спробував інший сценарій:

@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

Це добре працює на обох серверах, але різні виходи:

Сервер із проблемою:

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

Інший сервер:

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

екран друку несправного сервера немає проблем у WMI на відмовному сервері @DavidPostill
Mohamed Tag

Можливо, на кожному сервері ви можете просто перейти до командного рядка та ввести, ECHO %date%і вони підтвердять, що результат формату, який ви отримуєте на обох, однаковий чи ні. Можливо, налаштування форматування часу відрізняються між двома серверами, і тому у вас є невідповідності. Тому просто зробіть це і подивіться, що ви визначаєте. Якщо вони різні формати, то змініть формат, щоб він відповідав тому, що працює, а потім використовуйте той самий сценарій, наприклад, %date:~10,4%-%date:~4,2%-%date:~7,2%_%time:~0,2%.%time:~3,2%.%time:~6,2%і виконайте його.
Pimp Juice IT

@MohamedTag Очевидно, що там зазначено в ERROR: Code = 0x80020009 Description = Exception occurred. Facility = Dispatchповідомленні про помилку.
DavidPostill

Відповіді:


0

Він працює чудово на обох серверах, але на різних результатах

Спробуйте наступний пакетний файл (що є правильним способом розбору локального часу виходу з 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

Цей код все ще не працює на певному сервері з кодом помилки 0x80020009

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

Код помилки 80041002 вказує на відсутній або пошкоджений сховище wmi на збої машини.

Ключовим для вирішення проблеми тут є код помилки 80041002, який, з точки зору WMI, означає, що об’єкт неможливо знайти . Зокрема, це підсистема COM / OLE для WMI (aka WBEM), яка скаржиться, що не може знайти запитуваний клас або значення WMI.

Рішення полягає у виправленні сховища WMI:

Як виправити відсутнє або пошкоджене сховище WMI

Щоб виправити пошкоджений сховище WMI, спочатку запустіть перевірку диска ( chkdsk), щоб переконатися, що пошкодження не знаходиться на рівні зберігання. Д'ух. Далі переконайтесь, що оснащення WMI Control дійсно має труднощі при підключенні до WMI; він повинен скаржитися на "Не вдалося ініціалізувати всі необхідні класи WMI":

введіть тут опис зображення

Потім виберіть один із трьох видів виправлень для зламаних сховищ WMI: простий, кричущий чи страшний:

  • Простий: запустіть winmgmt /salvagerepositoryлокальний сховище WMI
  • Sordid: відновіть сховище WMI з резервної копії WMI (якщо у вас є)
  • Страшно: перевстановіть Windows із рятувального диска

Джерело шеф-кухаря в Windows - виявлення та виправлення проблем із WMI, які заважають запуску шеф-кухаря


Подальше читання

  • Індекс AZ командного рядка Windows CMD - відмінна довідка для всіх речей, що стосуються cmd-рядка Windows.
  • for / f - команда Loop проти результатів іншої команди.
  • getdate - Відображення дати та часу незалежно від місцеположення ОС, мови та обраного користувачем формату дати (Панель управління / Регіональний).
  • змінні - Вилучення частини змінної (підрядка).
  • wmic - Команда інструментації управління Windows.

Я спробував ваш сценарій і дав мені цей вихід (Log_ ~ -2 ~ -2 ~ -2 ~ -2 ~ -2.txt), і той самий сценарій чудово працює на інших пристроях, і це проблема
Mohamed Tag

@MohamedTag Я помітив, що "після пропуску відсутній C:\1\Log_ %_stamp%.txt(відповідь виправлена). Це виправляє?
DavidPostill

Який вихід wmic Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Yearна несправну машину?
DavidPostill

(") не впливає на скрипт, оскільки сценарій добре працює на інших пристроях з тією ж ОС, але різний вихід (~ -2 ~ -2 ~ -2 ~ -2 ~ -2.txt) на збійному пристрої та (Log_ 20170604142449.txt ) на всіх інших пристроях
Mohamed Tag

@MohamedTag Тоді ваш сценарій порушено. У назві цільового файлу є пробіл та невідповідні лапки.
DavidPostill

0

Я думаю, що проблема не пов’язана з партією, яку використовує Mohamed.

DavidPostill в твердження (which is the correct way to parse the local time output from wmic), щонайменше сумнівна. Немає одного правильного способу. ІМО не має жодної користі отримувати єдині елементи дати / часу і згодом заповнювати провідні нулі.

Ви отримаєте той же несправний вихід , якщо змінний dtбуде НЕ визначені. Так чи

  • сталася помилка при передачі партії на інший сервер або
  • так само як один рядок виходить з ладу з внутрішніми змінними, %date%і %time%це може бути неправильним cmd.exeв шляху залучення.

Перед тим, як збирати елементи, немає необхідності вводити елементи дати / часу у пара 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

Ехо в останньому рядку дозволяє уникнути помилок під час тестування, видаліть їх, коли вихід здається нормальним.


Це не пояснює, ERROR: Code = 0x80020009 Description = Exception occurred. Facility = Dispatchна якому не працює сервер.
DavidPostill
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.