У меня есть командный файл, который выглядит следующим образом:

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 ответ1

0

В вашем коде есть две проблемы. Сначала вы должны указать все пути, которые могут содержать пробелы.

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

Во-вторых, имя вашего почтового файла содержит «:», который не является допустимым символом для имен файлов. Вы должны изменить это.

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 и сохраняет возвращенный объект, а вторая строка использует объект. Конечно, для производственного кода ваша более короткая версия лучше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .