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;
}