カレントフォルダ内の全バッチを,ブログに投稿するためにまとめるバッチ。
$このフォルダのバッチをまとめるバッチ.bat
@echo off rem フォルダ内のバッチ系ファイルをまとめて rem ブログ投稿用に整形するバッチ rem rem ※対象の全ファイルがSJISで記述されている必要がある rem 出力先のテキストファイル名 set OUT_TXT=_このフォルダのバッチのまとめ.txt echo.> %OUT_TXT% rem $で始まらないBATを列挙 for /F "usebackq" %%i in (`dir /b * ^| findstr /R "^[^\$].*\.bat$"`) do ( rem このファイルを記録 call :record_one_file %%i sh ) rem WSFを列挙 for /F "usebackq" %%i in (`dir /b * ^| findstr /R "^.*\.wsf$"`) do ( call :record_one_file %%i xml ) rem JSを列挙 for /F "usebackq" %%i in (`dir /b * ^| findstr /R "^.*\.js$"`) do ( call :record_one_file %%i javascript ) rem 終了 echo 完了しました。 pause exit /b rem ファイル名を受け取って,内容を記録するルーチン。 :record_one_file rem ファイル名 SET FILE_PATH=%1 rem シンタックスハイライトのタイプ SET SYNTAX_TYPE=%2 rem ファイル名 echo.>> %OUT_TXT% echo %FILE_PATH%>> %OUT_TXT% echo.>> %OUT_TXT% echo ^>^|%SYNTAX_TYPE%^|>> %OUT_TXT% echo.>> %OUT_TXT% rem ファイル内容 type %FILE_PATH%>> %OUT_TXT% echo.>> %OUT_TXT% echo.>> %OUT_TXT% echo ^|^|^<>> %OUT_TXT% echo.>> %OUT_TXT% exit /b
工夫した点:
- 単純にBATを列挙すると自分自身も含まれてしまうので,ファイル名が$で始まるBATは除外するようにした。
- 内容を書き出す部分はルーチンでまとめた。
- テキストファイルの内容に「>」を書きたい場合,リダイレクタと間違えられないようにエスケープする必要があるが,この場合は「^」という文字を使ってエスケープする。
参考:
バッチファイルでのエスケープ処理: Thief's Guild Blog
http://koteitan.seesaa.net/article/116191231.html
- バッチファイルにおけるエスケープシーケンスは「^」。 これでエスケープしてやればどこにどんな文字でも書ける