バッチのまとめから,カレントフォルダ上に全バッチを復元するバッチ


下記エントリでは「カレントの全バッチを1テキストにまとめる」ことができた。

フォルダ内の全バッチ系ファイルを,はてなのブログ投稿用にまとめるバッチ - ソフトウェア勉強ログとサンプルコード
http://source-code-student.hatenablog.jp/entry/20150105/p3


そこで生成されたテキストをもとに,今度は逆に,カレントフォルダ上に全バッチを復元してみる。 ====

@if(0)==(0) ECHO OFF
rem http://d.hatena.ne.jp/TipsMemo+computer-technology/20131025/p1
cscript.exe //nologo //E:JScript "%~f0" %*
@pause
GOTO :EOF
@end

/*

	ドロップされたバッチまとめから
	カレントフォルダ上に全バッチを復元するバッチ

	※まとめを作るバッチは下記
	http://source-code-student.hatenablog.jp/entry/20150105/p3

*/


function log(s){ WScript.Echo(s); }


// 定数
var ForReading   = 1; // 読み込み
var ForWriting   = 2; // 書き込み(上書き)
	// http://d.hatena.ne.jp/language_and_engineering/20081017/1224168811

// まとめはドロップされる
var txt_filepath = WScript.Arguments.Unnamed(0);
var dir_path = txt_filepath.replace(/\\[^\\]+$/, "") + "\\";


// まとめを開く
var fso_r = WScript.CreateObject("Scripting.FileSystemObject");
var txt_r = fso_r.OpenTextFile( txt_filepath, ForReading );


// 書き込み先
var fso_w = WScript.CreateObject( "Scripting.FileSystemObject" );
var txt_w = null;
var output_file_path = "";


// 全行読み取る
var code_reading = false;
while( ! txt_r.AtEndOfStream )
{
	// 1行読み出し
	var line = txt_r.ReadLine().replace(/\r?\n$/, "");
	//log("読み取り:"+line);
	
	// コード内部でなければ
	if( ! code_reading ){
		
		// ファイル名を検出
		if( line.match( /^.+\..+$/ ) ){
			output_file_path = dir_path + line;
			log("書き込み先:" + output_file_path);
			
			txt_w = fso_w.CreateTextFile( output_file_path );
		}
	
		// コード開始を検出
		if( line.match( /^>\|.+\|$/ ) ){
			code_reading = true;
			log("コード開始");
		}
	
	}else{ // コード内部ならば
		
		// コードの終了を検出
		if( line.match( /^\|\|<$/ ) ){
			log("コード終了");
			txt_w.Close();
			code_reading = false;
		}else{
			// コードを記録
			txt_w.WriteLine( line );
		}
	}
	
}

// 全行読み取り終了
txt_r.Close();

log("終了");

これがあれば,全バッチの内容をブログに投稿することは容易だし,

逆にブログの投稿内容通りの内容でローカルにバッチを配置する事もすぐだ。