##はじめに
Windowsで使えるバッチファイルを公開する事を思いついたものの、
初心者にとっては、そのバッチファイルを使うまでの手順が煩わしく感じるかも知れない。
ということで、掲載したコードを簡単にファイル化してもらうためのバッチを作りました。
処理時間の短縮化と操作の簡潔化を図り、PowerShellに移植しました。
本ページで "B642File.bat" を作成後に、こちらの記事にて「マジック生成」バッチを「かんたん生成」することをオススメします。
##環境
Windows 10, Windows 7
##方法(バッチファイル準備)
下方のコードをコピーして保存して下さい。
- 黒色の枠内のテキスト全体を、マウスでドラッグして選択。
- [Ctrl]キーを押しながら [C]キーを押下。(コピー)
- テキストエディタ(メモ帳など)を起動。
- [Ctrl]キーを押しながら [V]キーを押下。(貼り付け)
- [Ctrl]キーを押しながら [S]キーを押下。(名前を付けて保存)
- "B642File.bat" などの名前で保存。
- バッチファイルの拡張子は ".bat" にすること。
- 作成したバッチファイルは、デスクトップ上など、ローカルドライブ内のユーザーフォルダ配下に配置する事をお奨めします。
※各種バッチファイル、CSVファイルなど色々なファイルが、同じフォルダ内に作られる事になります。
##方法(使用方法)
起動後、各記事に掲載のファイル作成用シーケンスをコピペして下さい。
- 記事内のファイル作成用のテキストをコピーします。
- 上記で作成したバッチファイルをダブルクリック。
- コマンドプロンプト (cmd.exe) 画面上で右クリック。
- 「貼り付け」を選択。
- 同じフォルダ内に、ファイルが生成している事を確認。
-
このバッチファイルは、
Windowsに標準搭載の、証明書ファイル関連のプログラム「CertUtil」を使用して、
Base64化したファイルを復号しています。 -
ファイル作成用シーケンスは次のような構成にしています。
ファイル名 <改行> \`\`\`又は--- <改行> Base64文字列複数行 <改行> ```又は--- -
一発で複数ファイルの生成処理が可能なようにコーディングしており、
「すべて選択」でページ全体のテキストをコピーして貼り付けても動作するようになっています。
‛"’(ダブルクォート) などが含まれていると構文エラーで異常終了しました。
改修しました。
※数百行に及ぶような大量のテキストを一度に貼り付けると、コマンドプロンプトが異常終了する事があります。そのような場合は、200行くらいずつに分けて貼り付けて下さい。 -
一つファイルを出力する度に、ログを出力します。バッチファイル名が "B642File.bat" のとき、ログファイル名は "B642File.log" となります。ログファイルは、処理が成功したかを確認できるようにしているだけですので、削除しても差し支えありません。
##コード
@ECHO OFF
COLOR 0A
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO ############# B642File.bat #############
ECHO # Converting data sequence #
ECHO # encoded in Base64 #
ECHO # to a file continuously #
ECHO # #
ECHO # 1st release: 2019-05-12 #
ECHO # Last update: 2019-07-08 #
ECHO # Author: Y. Kosaka #
ECHO # See the web for more information #
ECHO # https://qiita.com/x-ia #
ECHO ########################################
SET tScr=%~n0
SET extTmp=.b64
SET extLog=.log
TITLE %tScr%
:initiate
SET nameFile=newFile
SET flagOut=0
SET nLine=0
ECHO.
:input
ECHO Paste the file name and content encoded in Base64
SET inCode=
SET /P inCode=
SET inCode=%inCode: =%
SET inCode=%inCode:,=%
IF "%inCode%" EQU "" GOTO input
SET inCode="%inCode:"=%"
SET inCodeInitial="%inCode:"=%..."
IF "%inCodeInitial:~1,3%" EQU "---" SET inCodeInitial="```"
IF "%inCodeInitial:~1,3%" EQU "```" (
SET /A flagOut=flagOut+1
IF !flagOut! EQU 1 (
ECHO File name: %nameFile%
TITLE %tScr% %nameFile%
GOTO input
)
GOTO decode
) ELSE IF %flagOut% EQU 1 (
CALL :output
) ELSE IF %inCode% EQU "exit" (
GOTO eof
) ELSE (
SET nameFile=%inCode%
)
GOTO input
:output
ECHO %inCode:"=%>>%nameFile%%extTmp%
SET /A nLine=nLine+1
ECHO !nLine! lines input
TITLE %tScr% %nameFile% !nLine!
EXIT /B
:decode
certutil -decode %nameFile%%extTmp% %nameFile%
SET err=%ERRORLEVEL%
IF %err%. EQU 0. (
ECHO %date% %time% %tScr% %err% %nameFile%>>%tScr%%extLog%
ECHO Suceeded to create a file %nameFile%.
TITLE %tScr% %nameFile% created
DEL %nameFile%%extTmp%
) ELSE (
ECHO %date% %time% %tScr% %err% %nameFile%>>%tScr%%extLog%
ECHO Error %err% occured.
TITLE %tScr% Error%err%
)
ECHO If you want to exit, type "exit" and press Enter key.
GOTO initiate
:eof
ECHO Terminated.
ENDLOCAL
EXIT /B