Nombre de archivo de salida por lotes con fecha y hora

Nombre de archivo de salida por lotes con fecha y hora

Tengo un archivo por lotes que se parece a 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%

El script no se ejecuta principalmente debido a que se ingresa %mydate% %mytime%en el nombre del archivo.

¿Cómo puedo obtener el resultado del nombre del archivo con la fecha y hora actual?

Respuesta1

Hay dos problemas en su código. Primero debes citar todas las rutas que puedan contener espacios.

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

En segundo lugar, el nombre de su archivo zip contiene ':' que no es un carácter válido para los nombres de archivos. Debes cambiar eso.

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

Además de eso: ¿por qué mezclas el archivo bat y el archivo vbs? ¿Por qué no usas simplemente vbs? Y durante la depuración, debe dividir las líneas echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbsen dos líneas donde la primera línea llama NameSpacey almacena el objeto devuelto y la segunda línea usa el objeto. Por supuesto, para el código de producción, su versión más corta es mejor.

información relacionada