フォルダ内の全バッチ系ファイルを,はてなのブログ投稿用にまとめるバッチ


カレントフォルダ内の全バッチを,ブログに投稿するためにまとめるバッチ。

 

$このフォルダのバッチをまとめるバッチ.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

  • バッチファイルにおけるエスケープシーケンスは「^」。 これでエスケープしてやればどこにどんな文字でも書ける