
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.vbs
en dos líneas donde la primera línea llama NameSpace
y 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.