O arquivo em lote não está funcionando ao usar o timestamp no servidor win 2008 r2

2

Eu uso este comando no arquivo de lote para adicionar o registro de data e hora no arquivo:

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

Funciona bem no Windows Server 2008 R2, mas não funciona em outro dispositivo com o mesmo sistema operacional (2008 R2).

Eu tentei outro script:

@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:.txt" "C:\Log_ %stamp%.txt

Funciona bem em ambos os servidores, mas em diferentes saídas:

Servidor com problema:

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

Outro servidor:

Log_ 2017-06-04_12-50-07.txt
    
por Mohamed Tag 04.06.2017 / 12:59

2 respostas

0

Funciona bem em ambos os servidores, mas diferentes saídas

Tente o seguinte arquivo em lote (que é a maneira correta de analisar a saída de hora local de 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:.txt" "C:\Log_ %_stamp%.txt"
endlocal

Este código ainda está falhando em um determinado servidor, com código de erro 0x80020009

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

O código de erro 80041002 indica um repositório wmi ausente ou corrompido na máquina com falha.

The key to solving the problem here is the error code 80041002, which in WMI terms means Object cannot be found. Specifically, this is the COM/OLE subsystem for WMI (aka WBEM) complaining that it cannot find the requested WMI class or value.

A solução é corrigir o repositório WMI:

How to fix a missing or corrupted WMI repository

In order to fix a corrupted WMI repository, first run a disk check (chkdsk) to make sure that the corruption is not at the storage level. D’uh. Next, check that the WMI Control snap-in does indeed have difficulty in connecting to WMI; it should complain about ‘Failed to initialize all required WMI classes’:

enter image description here

Then pick one of the three kinds of fixes for broken WMI repositories: the simple, the sordid, or the scary:

  • Simple: run winmgmt /salvagerepository against the local WMI repository
  • Sordid: restore the WMI repository from a WMI backup (if you have one)
  • Scary: re-install Windows from the rescue disk

Fonte Chef no Windows - detectando e corrigindo Problemas do WMI que impedem que o cliente chef execute

Leitura Adicional

  • Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
  • para / f - Comando Loop contra os resultados de outro comando.
  • getdate - Exibe a data e a hora independentemente da localidade do SO, idioma ou formato de data escolhido pelos usuários (Painel de Controle / Regional ).
  • variáveis - Extrai parte de uma variável (substring).
  • wmic - Comando de instrumentação de gerenciamento do Windows.
por 04.06.2017 / 13:13
0

Acho que o problema não está relacionado ao lote que o Mohamed está usando.

A afirmação de DavidPostill (which is the correct way to parse the local time output from wmic) é no mínimo duvidosa. Não há um caminho correto. IMO não adianta pegar os elementos de data / hora individuais e preencher os zeros iniciais.

Você obterá a mesma saída com falha se o var dt for não definido. Então, ou

  • ocorreu um erro ao transferir o lote para o outro servidor ou
  • como também a linha única falha com as variáveis internas %date% e %time% pode estar errado cmd.exe no caminho envolvido.

Não há necessidade de colocar os elementos de data / hora em vars antes de montar o 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:.txt" "C:\Log_%stamp%.txt

O eco na última linha evita erros durante o teste, remova-o quando a saída parecer boa.

    
por 06.06.2017 / 13:27