formato correto para datetime anexado ao nome do arquivo

1

Estou tentando configurar um arquivo em lotes para executar um conjunto de procs armazenados e despejar a saída em um arquivo de texto com registro de data e hora. Estou com problemas para encontrar o formato correto para o registro de data e hora.

Aqui está o que estou usando

osql.exe -S <server> -E -Q "EXEC <stored procedure> " -o "c:\filename_%date:~-0,10%_%time:~-0,10%.txt"

O erro que recebo é:

Não é possível abrir o arquivo de saída - x: \ filename_Thu 06/25 / _16: 26: 43.1.txt Nenhum tal arquivo ou diretório

Não consigo encontrar a documentação e brinquei com ela, mas não consigo encontrar o formato correto.

    
por jhayes 26.06.2009 / 00:36

3 respostas

1

: não é um caractere válido em um nome de arquivo no windows (Juntamente com "\ / *? < > e |), estou supondo que a expansão de% time contém as seguintes: 's separando horas, minutos e segundos .

Uma punhalada no escuro pode estar substituindo% time: ~ 0,10% com algo como:

%time:~0,2%_%time:~3,2%_%time:~6,2%

Isso pressupõe que% time% sempre estará no formato "hh: mm: ss.ss", e acho que isso depende da sua localidade (ou seja, minha localidade usa um, em vez de a. para separar segundos de 1 / 100 segundos). Deve dar-lhe algo como hh_mm_ss em vez de hh: mm: ss. Se você quiser o primeiro dígito de 1/100 segundos (como no seu exemplo original), você pode alterar a última expansão de variável para ter o intervalo de caracteres 6,4 em vez de 6,2.

Então, de relance, eu ignorei o / 's que também é inválido em um nome de arquivo, você provavelmente também deseja removê-lo também. Supondo que% date% esteja no formato "ddd DD / MM / aaaa", você pode tentar algo como (minha localidade difere dessa forma para que não seja testada):

%date:~4,2%_%date:~7,2%_%date:~10,4%

Para testar tudo isso, se você ainda não estiver fazendo isso, sugiro abrir cmd.exe e digitá-lo lá. "echo% time: ~ 0,2% etc.etc." para encontrar algo que se ajuste ao seu idioma.

Finalmente, uma palavra de aviso, isso basicamente pressupõe uma localidade específica, é improvável que seja portável para diferentes localidades.

    
por 26.06.2009 / 00:41
2

Eu aconselho você a usar um formato de data mais convencional, que também se presta à fácil classificação - yyyymmddhhmmss. ou seja, não use separadores. Quando você olha pela primeira vez para esse formato, pode parecer difícil de ler, mas você supera isso em cerca de 2,5 segundos.

    
por 26.06.2009 / 07:37
1

Se você quiser formato universal para data, tente isso.

for /F "skip=1 tokens=2-4 delims=(-)" %%A in ('echo ^| date') do for /F "Tokens=2-4 Delims=/ " %%X in ('date /t') do set %%A=%%X & set %%B=%%Y & set %%C=%%Z

echo today is %dd%%mm%%yy%

Isso é muito útil para servidores que seguem formatos de data diferentes, como mm / dd / aaaa ou dd / mm / aaaa Isso sempre fará com que você obtenha mês em variável mm, dia em dd e ano em yy

    
por 28.06.2009 / 05:51

Tags