
Eu tenho um arquivo em lote parecido com este:
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 foi executado principalmente devido à inserção %mydate% %mytime%
do nome do arquivo.
Como posso obter a saída do nome do arquivo com a data e hora atual?
Responder1
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 arquivo bat e arquivo vbs? Por que você simplesmente não usa vbs? E durante a depuração você deve dividir as linhas echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs
em duas linhas, onde a primeira linha chama NameSpace
e armazena o objeto retornado e a segunda linha usa o objeto. É claro que para código de produção sua versão mais curta é melhor.