
Ich habe eine Batchdatei, die so aussieht:
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%
Die Ausführung des Skripts schlägt hauptsächlich aufgrund der Eingabe %mydate% %mytime%
in den Dateinamen fehl.
Wie kann ich den Dateinamen mit dem aktuellen Datum und der aktuellen Uhrzeit ausgeben?
Antwort1
In Ihrem Code gibt es zwei Probleme. Erstens müssen Sie alle Pfade, die Leerzeichen enthalten können, in Anführungszeichen setzen.
CScript _zipIt.vbs "%FOLDERTOZIP%" "%OUTPUTFILE%"
Zweitens enthält der Name Ihrer Zip-Datei ':', was kein gültiges Zeichen für Dateinamen ist. Das müssen Sie ändern.
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a-%%b)
Abgesehen davon: Warum mischen Sie Bat- und VBS-Dateien? Warum verwenden Sie nicht einfach VBS? Und beim Debuggen sollten Sie die Zeilen echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs
in zwei Zeilen aufteilen, wobei die erste Zeile NameSpace
das zurückgegebene Objekt aufruft und speichert und die zweite Zeile das Objekt verwendet. Für Produktionscode ist Ihre kürzere Version natürlich besser.