
次のようなバッチ ファイルがあります。
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
コードには 2 つの問題があります。まず、スペースを含む可能性のあるすべてのパスを引用符で囲む必要があります。
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
最初の行で返されたオブジェクトを呼び出して保存し、2 番目の行でそのオブジェクトを使用するように、行を 2 行に分割する必要がありますNameSpace
。もちろん、製品版のコードでは、短いバージョンのほうが適しています。