Nome do arquivo de saída em lote com data e hora

0

Eu tenho um arquivo em lote que se parece com isso:

set FOLDERTOZIP=c:\myfolder

For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a:%%b)

set OUTPUTFILE=C:\myArchive %mydate% %mytime%.zip

echo Set objArgs = WScript.Arguments > _zipIt.vbs
echo InputFolder = objArgs(0) >> _zipIt.vbs
echo ZipFile = objArgs(1) >> _zipIt.vbs
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipIt.vbs
echo Set objShell = CreateObject("Shell.Application") >> _zipIt.vbs
echo Set source = objShell.NameSpace(InputFolder).Items >> _zipIt.vbs
echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs
echo wScript.Sleep 2000 >> _zipIt.vbs

CScript  _zipIt.vbs  %FOLDERTOZIP%  %OUTPUTFILE%

O script não é executado principalmente devido à colocação de %mydate% %mytime% no nome do arquivo.

Como posso obter a saída do nome do arquivo com o datetime atual?

    
por user1995781 16.04.2015 / 08:36

1 resposta

0

Existem dois problemas no seu código. Primeiro você deve citar todos os caminhos que podem conter espaços.

CScript  _zipIt.vbs  "%FOLDERTOZIP%"  "%OUTPUTFILE%"

Segundo o nome do seu arquivo zip contém ':' que não é um caractere válido para nomes de arquivos. Você deve mudar isso.

For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a-%%b)

Além disso: por que você mistura o arquivo bat e o arquivo vbs? Por que você não usa apenas vbs? E durante a depuração, você deve dividir as linhas como echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs em duas linhas, nas quais chama pela primeira vez NameSpace e armazena o objeto retornado ea segunda linha usa o objeto. É claro que para o código de produção, sua versão mais curta é melhor.

    
por 16.04.2015 / 11:51