WSH(JScript)のフォルダ操作でよく使う処理

WSH(JScript)の基本機能をぼちぼちと。
記載内は、下記のライブラリの抜粋となります。

空フォルダを作成する

var fs = new ActiveXObject('Scripting.FileSystemObject');

// フォルダパスからフォルダを作成する
function FileUtility_createFolder(folderpath) {
  var ret = false,
      fullpath = fs.GetAbsolutePathName(folderpath);
  if (!(fs.FolderExists(fullpath) || fs.FileExists(fullpath))) {
    var parentpath = fs.GetParentFolderName(fullpath);
    if (parentpath != '') {
      _FileUtility_createFolder(fs.GetParentFolderName(fullpath));
    }
    try {
      fs.CreateFolder(fullpath);
      ret = true;
    } catch (e) {
      // ファイルが見つかりません(パス長問題) || パスが見つかりません(パス不正 || 存在しない)
    }
  }
  return ret;
};

// ファイルパスからフォルダを作成する
function FileUtility_createFileFolder(filepath) {
  var ret = false;
  var fullpath  = fs.GetAbsolutePathName(filepath);
  var parentpath= fs.GetParentFolderName(fullpath);
  if (parentpath != '') {
    // 親フォルダ作成
   ret = FileUtility_createFolder(parentpath);
  }
  return ret;
};

空フォルダを判定する

var fs = new ActiveXObject('Scripting.FileSystemObject');

// 空のフォルダパス判定する
function FileUtility_isEmptyFolder(folderpath) {
  var ret = false,
      folder,
      fullpath = fs.GetAbsolutePathName(folderpath);
  if (fs.FolderExists(fullpath)) {
    folder = fs.GetFolder(fullpath);
    // ファイルなし && フォルダなし
    try {
      ret = folder.Files.Count == 0 && folder.SubFolders.Count == 0;
    } catch (e) {
      // パス長問題の場合、falseを返す
    }
  }
  return ret;
}

存在しないファイルパスの取得

var fs = new ActiveXObject('Scripting.FileSystemObject');
var sh = new ActiveXObject('WScript.Shell');

// 存在しないファイルパスを返す
function FileUtility_getTempFilePath(opt_folderpath, opt_ext) {
  var folderpath = (opt_folderpath)?
      fs.GetAbsolutePathName(opt_folderpath):
      sh.CurrentDirectory;
  var ext = (opt_ext && opt_ext.length!=0)? '.'+opt_ext: '';

  var fullpath = '';
  do {
    fullpath = fs.BuildPath(folderpath, fs.GetTempName()+ext);
  } while (fs.FileExists(fullpath) || fs.FolderExists(fullpath));
  return fullpath;
};

// 存在しないファイル名を返す
function FileUtility_getTempFileName(opt_folderpath, opt_ext) {
  return fs.GetFileName(FileUtility_getTempFilePath(opt_folderpath, opt_ext));
};

※fs.GetTempName()関数は、単純にランダムな文字列を返すだけであるため、使用者側で存在確認が必要

ユニークなパスの取得

var fs = new ActiveXObject('Scripting.FileSystemObject');

// ユニークなファイルパスを返す。
function FileUtility_getUniqFilePath(path) {
  var fullpath = fs.GetAbsolutePathName(filepath);
  var folderpath = fs.GetParentFolderName(fullpath);
  var uniqpath = fullpath;

  if (fs.FileExists(fullpath) || fs.FolderExists(fullpath)) {
    var ext = fs.GetExtensionName(fullpath);
    if (ext.length !== 0) {
      ext = '.'+ext;
      fullpath = fs.BuildPath(folderpath, fs.GetBaseName(fullpath));
    }

    var idx = 1;
    do {
      idx++;
      uniqpath = fullpath + '_'+idx + ext;
    } while (fs.FileExists(uniqpath) || fs.FolderExists(uniqpath));
  }
  return uniqpath;
}

// ユニークなファイル名を返す。
function FileUtility_getUniqFileName(path) {
  return fs.GetFileName(FileUtility_getUniqFilePath(path));
}

有効なファイル名を取得する

// 有効なファイル名を返す
function FileUtility_getValidFileName(name) {
  var marks = ['\\','/',':','*','?','"','<','>','|'];
  for (var i=0; i<marks.length; i++) {
    name = name.replace(marks[i], '');
  }
  return name;
}

関連