帶日期時間的批次輸出檔名

帶日期時間的批次輸出檔名

我有一個如下所示的批次文件:

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並儲存返回的對象,第二行使用該對象。當然,對於生產代碼,較短的版本更好。

相關內容