Use o cmd.exe
processador de comando para construir um nome de arquivo com carimbo de data / hora para registrar a saída de sua tarefa agendada
Para construir sobre as respostas de outras pessoas aqui, pode ser que você queira criar um arquivo de saída que tenha a data e / ou hora embutida no nome do arquivo. Você pode usar o cmd.exe
processador de comandos para fazer isso por você.
Nota: Essa técnica pega a saída da string de variáveis de ambiente internas do Windows e as divide com base na posição do caractere. Por causa disso, os valores exatos fornecidos nos exemplos abaixo podem não ser corretos para a região do Windows que você usa. Além disso, com algumas configurações regionais, alguns componentes da data ou hora podem introduzir um espaço no nome do arquivo construído quando seu valor for menor que 10. Para atenuar esse problema, coloque o nome do arquivo entre aspas para que quaisquer espaços indesejados no arquivo name não quebrará a linha de comando que você está construindo. Experimente e descubra o que funciona melhor para sua situação.
Esteja ciente de que PowerShell
é mais poderoso do que cmd.exe
. Uma maneira de ser mais poderoso é que pode lidar com diferentes regiões do Windows. Mas esta resposta é sobre como resolver esse problema usando cmd.exe
, não PowerShell
, então continuamos.
Usando cmd.exe
Você pode acessar diferentes componentes de data e hora dividindo as variáveis de ambiente internas %date%
e %time%
, como segue (novamente, os valores exatos de divisão dependem da região configurada no Windows):
- Ano (4 dígitos):
%date:~10,4%
- Mês (2 dígitos):
%date:~4,2%
- Dia (2 dígitos):
%date:~7,2%
- Hora (2 dígitos):
%time:~0,2%
- Minuto (2 dígitos):
%time:~3,2%
- Segundo (2 dígitos):
%time:~6,2%
Suponha que você queira que seu arquivo de log seja nomeado usando este formato de data / hora: " Log_[yyyyMMdd]_[hhmmss].txt
". Você usaria o seguinte:
Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
Para testar isso, execute a seguinte linha de comando:
cmd.exe /c echo "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt"
Juntando tudo, para redirecionar ambos stdout
e stderr
de seu script para um arquivo de log nomeado com a data e hora atuais, use o seguinte como sua linha de comando:
cmd /c YourProgram.cmd > "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt" 2>&1
Observe o uso de aspas ao redor do nome do arquivo para lidar com instâncias em que um componente de data ou hora pode introduzir um caractere de espaço.
No meu caso, se a data / hora atual fosse 05/10/2017 9:05:34, a linha de comando acima produziria o seguinte:
cmd /c YourProgram.cmd > "Log_20171005_ 90534.txt" 2>&1