날짜/시간이 포함된 일괄 출력 파일 이름

날짜/시간이 포함된 일괄 출력 파일 이름

다음과 같은 배치 파일이 있습니다.

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하고 저장하고 두 번째 줄은 개체를 사용하는 두 줄로 줄을 나누어야 합니다 . 물론 프로덕션 코드의 경우 더 짧은 버전이 더 좋습니다.

관련 정보