A Better Project@はてなダイアリー(インポート版)

基本的にここは更新されません。詳細はaboutへ。

1.5G のような形式でサイズ指定して、fsutil.exe で空ファイルを作る JScript

fsutil.exe を使うと簡単に coLinux の仮想イメージにも使える巨大サイズの空ファイルが作れるということを昨日知ったのですが、サイズをバイトに変換して指定するのが面倒なので、引数に 「ファイル名 1.5G」とか指定すると 1.5G の空ファイルを作れるような JScript を書いてみました。

//createEmptyFile.js
// recure fsutil.exe
// this script is the MIT License.
//  http://www.opensource.org/licenses/mit-license.php

var WshShell = new ActiveXObject("WScript.Shell");
var WshArgs = WScript.Arguments;
if (WshArgs.length < 2) {
    help();
}
var fileName = WshArgs(0);
var fileSize = WshArgs(1);
var sliceRe = /([0-9]+\.?[0-9]*)([KMG])$/i
var numberPart;
var prefixPart;
if (sliceRe.test(fileSize)) {
    var slicedFilesize = sliceRe.exec(fileSize);
    numberPart = parseFloat(slicedFilesize[1]);
    prefixPart = slicedFilesize[2].toLowerCase();
}else {
    numberPart = parseFloat(fileSize);
    if (isNaN(numberPart)) {
        numberPart = 0;
    }
    prefixPart = "none";
}
var exp = prefixToExp(prefixPart);
fileSize = Math.pow(1024, exp) * numberPart;
var myFsutil = WshShell.Exec("fsutil file createnew "
                              +  fileName + " " + fileSize);
puts(myFsutil.StdOut.ReadAll());

function puts(str){
    WScript.Echo(str);
}

function help(){
    puts("usage: createEmptyFile.js name size");
    puts(" size:number(positive real)+ [K|M|G]");
    puts("  K:1024^1B, M:1024^2B G:1024^3B");
    WScript.Quit();
}

function prefixToExp(prefix) {
    switch (prefix) {
        case "k":
            return 1;
        case "m":
            return 2;
        case "g":
            return 3;
        default :
            return 0;
    }
}

K、M、G(小文字指定も可)の接頭辞に対応しています。fsutil.exe は管理者権限が必要なので、このスクリプトも管理者権限がある状態で実行してください。