タブファイラー開発ブログ

Tablacus ExplorerやX-Finderの作者のブログ

ちょっとしたスクリプト - Tablacus Explorer

某所で要望のあったスクリプトを3つ書いてみました。

・フォルダ構成のみクリップボードにコピー

var CreateFolderOnly2 = function (path, dest, Items, nAdd)
{
  api.SetWindowText(te.hwnd, path);
  CreateFolder(dest);
  if (nAdd == 0) {
    Items.AddItem(dest);
  }
  var wfd = api.Memory("WIN32_FIND_DATA");
  var hFind = api.FindFirstFile(path + "\\*", wfd);
  var bFind = hFind != INVALID_HANDLE_VALUE;
  while (bFind) {
    if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
      var fn = wfd.cFileName;
      if (fn != "." && fn != "..") {
        CreateFolderOnly2(fso.BuildPath(path, fn), fso.BuildPath(dest, fn), Items, nAdd - 1);
      }
    }
    bFind = api.FindNextFile(hFind, wfd);
  }
  api.FindClose(hFind);
};

var CreateFolderOnly = function (Item, Items, temp, nAdd)
{
  var path = api.GetDisplayNameOf(Item, SHGDN_FORPARSING);
  if (/^[A-Z]:\\|^\\/i.test(path)) {
    var fn = fso.GetFileName(path);
    if (fn && fso.FolderExists(path)) {
      var dest = fso.BuildPath(temp, fn);
      CreateFolderOnly2(path, dest, Items, nAdd);
    }
  }
};

var title = api.GetWindowText(te.hwnd);
var temp = fso.BuildPath(fso.GetSpecialFolder(2).Path, "tablacus");
if (!IsExists(temp)) {
  CreateFolder(temp);
}
temp += "\\folder";
DeleteItem(temp);
CreateFolder(temp);

var FV = GetFolderView(Ctrl, pt);
var Items = te.FolderItems();
var Selected = FV.SelectedItems();
if (Selected) {
  for (var i = 0; i < Selected.Count; i++) {
    CreateFolderOnly(Selected.Item(i), Items, temp, 0);
  }
}
if (Items.Count == 0) {
  CreateFolderOnly(FV, Items, temp, 1);
}
api.OleSetClipboard(Items);
api.SetWindowText(te.hwnd, title);

f:id:tablacus:20150714222903p:plain

長いしフォルダがたくさんあると時間が掛るので、WSHにするとか、アドオンにしてマルチプロセスにする方が良さそうな感じですが…

 

1階層上に送る

var FV = GetFolderView(Ctrl, pt);
var Selected = FV.SelectedItems();
if (Selected) {
    var oDest = sha.NameSpace(fso.GetParentFolderName(api.GetDisplayNameOf(FV, SHGDN_FORPARSING)));
    if (oDest) {
        oDest.MoveHere(Selected, FOF_ALLOWUNDO);
    }
}

f:id:tablacus:20150714223605p:plain

 

・1階層下から吸い出す

 

var FV = GetFolderView(Ctrl, pt);
var path = OpenDialog(fso.GetParentFolderName(api.GetDisplayNameOf(FV, SHGDN_FORPARSING)));
if (path) {
    FV.Folder.MoveHere(path, FOF_ALLOWUNDO);
}

f:id:tablacus:20150714224256p:plain