带日期时间的批量输出文件名

带日期时间的批量输出文件名

我有一个如下所示的批处理文件:

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%

脚本运行失败主要是因为输入%mydate% %mytime%文件名不正确。

如何获取带有当前日期时间的文件名输出?

答案1

您的代码中有两个问题。首先,您必须引用所有可以包含空格的路径。

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

其次,您的 zip 文件的名称包含“:”,这不是文件名的有效字符。您必须更改它。

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

除此之外:为什么要混合使用 bat 文件和 vbs 文件?为什么不直接使用 vbs?并且在调试期间,您应该将行拆分echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs为两行,第一行调用NameSpace并存储返回的对象,第二行使用该对象。当然,对于生产代码,较短的版本更好。

相关内容