Obtendo data em um arquivo em lote

1

Não sei nada sobre arquivos em lote e preciso automatizar um aplicativo. O aplicativo tem dois campos

  1. data de hoje
  2. Data de ontem

No arquivo em lote, tenho a localização do aplicativo e minhas informações de login.
E além disso preciso dessas duas datas. Como posso obter as datas via arquivo de lote?

    
por asmi 06.08.2015 / 21:30

2 respostas

1

Em um sistema Microsoft Windows, você pode obter a data atual usando o comando date /t (a opção /t impede que o comando solicite uma alteração na data) ou usando echo %date% para exibir o conteúdo da variável de ambiente de data. No entanto, ambos exibem a data no formato DDD mm/dd/yyyy , se o sistema usa um formato de data dos EUA para exibir datas, em que DDD é o dia da semana representado por uma abreviação de 3 caracteres, por exemplo, "Thu", mm é uma representação de dois dígitos do mês, por exemplo, "08" para agosto, dd é o dia e yyyy é o ano.

C:\>date /t
Thu 08/06/2015

C:\>echo %date%
Thu 08/06/2015

Você pode reformatar a representação da data armazenada na variável de ambiente %date% . Por exemplo, se você quiser a data no formato aaaammdd, pode usar um comando como o abaixo, em que uma variável, YYYYMMDD , está definida para conter a data reformatada; o nome da variável pode ser o que você quiser, por exemplo, mydate, etc.

C:\>set YYYYMMDD=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%

C:\>echo %YYYYMMDD%
20150806

Os argumentos de substring para extrair os elementos da string de data estão no formato %variable:~startposition,numberofchars% , portanto, se o "T" na quinta-feira na string "Qui 08/06/2015" estiver na posição 0, o 10º caractere será o "2" de 2015 e eu quero 4 personagens, ou seja, "2015", então %DATE:10,4% vai me dar esses personagens. Ou você também pode pensar no primeiro número como o número de caracteres a serem ignorados, ou seja, %variable:~num_chars_to_skip,numberofchars% . Em seguida, posso acrescentar %DATE:~4,2% para obter "08" para o mês seguido por %DATE:~7,2% para extrair o dia, ou seja, "06" se a data for 6 de agosto de 2015 representada na variável %DATE% como "Qui 08 / 06/2015 ". Referência com links adicionais

Se o seu arquivo de lote puder ser usado em sistemas em outros países, talvez seja necessário fazer ajustes para um estilo diferente de exibição de data diferente de mês / dia / ano se você estiver reformatando a data em vez de exibi-la apenas em qualquer formato é o padrão para o sistema. Se você emitir um comando reg query , poderá ver o formato padrão do sistema. Por exemplo:

C:\>reg query "HKCU\Control Panel\International" /v sShortDate

HKEY_CURRENT_USER\Control Panel\International
    sShortDate    REG_SZ    M/d/yyyy

No exemplo acima, vejo que o sistema está usando o formato mês / dia / ano. A configuração para o país pode ser vista com reg query "HKCU\Control Panel\International" /v sCountry , mas isso pode não ser uma coisa com a qual você deve se preocupar se souber que os sistemas são locais usando uma representação de data padrão.

Para obter maneiras de obter a data de ontem, há várias postagens do Stack Overflow, incluindo a mencionada por DavidPostill:

Como obter a data de ontem no arquivo de lote?

como obter a data de ontem no DOS

dos batch programming: como obter e exibir ontem a data

    
por 06.08.2015 / 23:02
0

Ligeiramente OT, mas se você for capaz de usar o PowerShell em vez de CMD.EXE, tudo fica muito mais fácil, por exemplo, você pode usar a expressão Get-Date e um UFormat , conforme documentado aqui , para fazer exatamente o que você quer. O Powershell também facilita a realização de cálculos aritméticos em datas, por exemplo, sabe que o dia anterior a 1 de janeiro de 2025 não é 0 de janeiro de 2025.

O PowerShell é padrão nas versões do Windows, voltando para o Windows 7, pelo menos.

Exemplos (aqui, PS > é um prompt na janela ISE do PowerShell interativa):

PS > $oldfile = "backup." + (get-date (get-date).addDays(-1) -UFormat "%Y%m%d")
PS > $newfile = "backup." + (get-date -UFormat "%Y%m%d")

PS > echo $oldfile
backup.20171027
PS > echo $newfile
backup.20171028
    
por 28.10.2017 / 23:34

Tags