« Command.com用バッチファイルをJSファイルにラップする。 | トップページ | VBAからAdobe ReaderでPDFファイルを印刷する。(その3) »

2007年11月16日 (金)

ZIP圧縮の待ち合わせ方法

また別の待ち合わせ方法です。ZIPファイルの更新日時の変化を捕らえます。

@if(0)==(0) ECHO OFF
CScript.exe //NoLogo //E:JScript "%~f0" %*
GOTO :EOF
@end
var Usage="Usage: MakeZIP.CMD ZIPfile files...";
if(WScript.Arguments.Count()<2){
  WScript.Echo(Usage);
  WScript.Quit();
}
var ZIPfile=WScript.Arguments.Item(0);
var fso=new ActiveXObject("Scripting.FileSystemObject");
if(fso.GetExtensionName(ZIPfile).toUpperCase()!="ZIP"){
  WScript.Echo("Invalid Extension Name -",ZIPfile);
  WScript.Quit();
}
if(!fso.FileExists(ZIPfile)){
  var File=fso.CreateTextFile(ZIPfile,false);
  File.Write("PK" + String.fromCharCode(5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0));
  File.Close();
}
var wShell=new ActiveXObject("WScript.Shell");
var vbYesNoCancel=3;
var vbQuestion=32;
var vbYes=6;
var vbNo=7;
var vbCancel=2;
var Shell=new ActiveXObject("Shell.Application");
var File=fso.GetFile(ZIPfile);
var zFolder=Shell.NameSpace(File.Path);
F1:for(var k=1;k<WScript.Arguments.Count();k++){
  var Path=WScript.Arguments.Item(k);
  var FileName=fso.GetFileName(Path);
  var sFolderItem=Shell.NameSpace(fso.GetParentFolderName(fso.GetAbsolutePathName(Path))).ParseName(FileName);
  if(!sFolderItem){
    WScript.Echo(Path,"- Not Found.");
    break;
  }
  W1:while(true){
    var zFolderItem=zFolder.ParseName(FileName);
    if(!zFolderItem){
      var ModifyDate=new Date(File.DateLastModified);
      zFolder.CopyHere(sFolderItem);
      while(ModifyDate.valueOf()==new Date(File.DateLastModified).valueOf()) WScript.Sleep(100);
      break;
    }else{
      var Ans=wShell.PopUp("このフォルダには既に次のファイルが存在します:\n\n"+
                 '"' + FileName + '"\n\n既存のファイルと置き換えますか?',
                 0,"ファイル置換の確認",vbYesNoCancel+vbQuestion);
      switch(Ans){
      case vbYes:
        zFolderItem.InvokeVerb("delete");
        break;
      case vbNo:
        break W1;
      case vbCancel:
        break F1;
      }
    }
  }
}
WScript.Quit();

« Command.com用バッチファイルをJSファイルにラップする。 | トップページ | VBAからAdobe ReaderでPDFファイルを印刷する。(その3) »