どうも、退屈なことはbatにやらせている 0 -Ray- です!
今回は私が作成し、実際に使っているbatファイルを紹介していきます!
このbatは検証作業用に作成しました!
別マクロで同じようなlogを取得し、試験の項番毎のフォルダに移動する。なんてことない作業ですが、何百項目もあると、毎回手動で移動するのも中々大変でした。
正直劇的に工数が減ったわけではありませんが、制作過程は勉強になりましたし、作業が少し楽になったので作成して良かったと思ってます!
つい思い出話をしてしまいました、、さっそく本題にいきましょう!
一番最後にダウンロードできるリンクを用意するのでご自由にお使いください!
こちらの記事ではメニュー表示 がある少し凝った版のbatを解説しております。
簡易版は 別記事 で解説します。
前提
・移動元のフォルダ構成
試験前にマクロを起動して、以下のフォルダ構成でlogを取得してました。
このフォルダ配下に各種機器のlogが格納されるイメージです。ここは任意に変更可能です。
解説する際はこちらが移動元となる想定で解説します。
C:\Users\test-pc\log>tree
C:.
├─all
│ └─Ap
├─cpu
├─operation
├─snmp
└─syslog
・移動先のフォルダ構成
フォルダを作るコードは含まれておりません。(別途batで作成してました。)
このフォルダ配下に各種機器のlogを格納するイメージです。ここも任意に変更可能です。
解説する際はこちらが移動先となる想定で解説します。
C:\Users\test-pc\log\test\No1
├─after
│ └─Ap
├─before
│ └─Ap
├─cpu
├─operation
├─snmp
└─syslog
コード
@echo off
REM ----- メニュー表示バッチ・ファイル
@set alllog=C:\Users\test-pc\log\all\
@set cpu=C:\Users\test-pc\log\cpu\
@set snmp=C:\Users\test-pc\log\syslog\
@set syslog=C:\Users\test-pc\log\snmp\
@set ope=C:\Users\test-pc\log\operation\
@set file=*.log
:TOP
cls
echo ※フォルダパスはエクスプローラーのアドレスバーをそのままコピーすることを推奨します。
set /P STR_INPUT="cpu,syslog,trap 内のファイルを移動します。移動先のフォルダパスを入力して下さい: "
:MEN
echo *****************************************************************
echo * menu *
echo * *
echo * 0:change_directory *
echo * 1:all *
echo * 2:cpu *
echo * 3:syslog *
echo * 4:trap *
echo * 5:operation *
echo * 9:end *
echo * *
echo *****************************************************************
:MENUSTART
set USR_INPUT_STR=
set /P USR_INPUT_STR="番号を入力してください: "
if %USR_INPUT_STR%==0 (
goto TOP
) else if %USR_INPUT_STR%==1 (
goto ALL
) else if %USR_INPUT_STR%==2 (
goto CPU
) else if %USR_INPUT_STR%==3 (
goto SYS
) else if %USR_INPUT_STR%==4 (
goto TRA
) else if %USR_INPUT_STR%==5 (
goto OPE
) else if %USR_INPUT_STR%==9 (
goto EXITTRAP
) else (
echo メニューにその番号はありません。
echo.
goto MENUSTART
)
REM ALL
:ALL
set /P A_B="beforeかafterか選択してください(a/b): "
if %A_B%==b (
move %alllog%%file% %STR_INPUT%\before\
xcopy /e /y %alllog%\ %STR_INPUT%\before\
rmdir /q /s %alllog%\Ap
echo beforeに移動完了しました。
pause
cls
) else if %A_B%==a (
move %alllog%%file% %STR_INPUT%\after\
xcopy /e /y %alllog%\ %STR_INPUT%\after\
rmdir /q /s %alllog%\Ap
echo afterに移動完了しました。
pause
cls
)else (
echo 無効な文字列です。a or b の入力をお願いいたします。
pause
cls
)
cls
goto MEN
REM CPU
:CPU
move %cpu%%file% %STR_INPUT%\cpu\
echo cpu移動完了しました。
pause
cls
goto MEN
REM SYS
:SYS
move %snmp%%file% %STR_INPUT%\syslog\
echo syslog移動完了しました。
pause
cls
goto MEN
REM TRA
:TRA
move %syslog%%file% %STR_INPUT%\trap\
echo trap移動完了しました。
pause
cls
goto MEN
REM OPE
:OPE
move %syslog%%file% %STR_INPUT%\operation\
echo operation移動完了しました。
pause
cls
goto MEN
:EXITTRAP
echo.
echo 終了します。
pause
長い!ですが、処理自体は単純なので適宜解説していきます!
コード解説
@echo off
REM ----- メニュー表示バッチ・ファイル
@set alllog=C:\Users\test-pc\log\all\
@set cpu=C:\Users\test-pc\log\cpu\
@set snmp=C:\Users\test-pc\log\syslog\
@set syslog=C:\Users\test-pc\log\snmp\
@set ope=C:\Users\test-pc\log\operation\
@set file=*.log
ここはいつもの要件定義です。
移動元のフォルダ構成を定義づけしてます。
:TOP
cls
echo ※フォルダパスはエクスプローラーのアドレスバーをそのままコピーすることを推奨します。
set /P STR_INPUT="cpu,syslog,trap 内のファイルを移動します。移動先のフォルダパスを入力して下さい: "
ここでユーザーがlogを格納するフォルダを STR_INPUT に格納します。
アドレスバーからコピー&ペーストでできるようにしてます。
前提に従って具体例を挙げると C:\Users\test-pc\log\test\No1 が入力される想定です。
以下の解説でもこのフォルダに移動する想定で解説します。
:MEN
echo *****************************************************************
echo * menu *
echo * *
echo * 0:change_directory *
echo * 1:all *
echo * 2:cpu *
echo * 3:syslog *
echo * 4:trap *
echo * 5:operation *
echo * 9:end *
echo * *
echo *****************************************************************
こちらはメニュー表示です。
任意に変更できます!
set USR_INPUT_STR=
set /P USR_INPUT_STR="番号を入力してください: "
ここでユーザーがメニューに従って番号を入力し、 USR_INPUT_STR に格納します。
番号はメニューに表示されていて、それぞれの処理に移動できるようにしてます。
if %USR_INPUT_STR%==0 (
goto TOP
) else if %USR_INPUT_STR%==1 (
goto ALL
) else if %USR_INPUT_STR%==2 (
goto CPU
) else if %USR_INPUT_STR%==3 (
goto SYS
) else if %USR_INPUT_STR%==4 (
goto TRA
) else if %USR_INPUT_STR%==5 (
goto OPE
) else if %USR_INPUT_STR%==9 (
goto EXITTRAP
) else (
echo メニューにその番号はありません。
echo.
goto MENUSTART
)
ここで前述の番号に従ってそれぞれの処理に移動します。
今回はラベル(TOP,ALL,CPUなど)を使用してます’。
REM ALL
:ALL
set /P A_B="beforeかafterか選択してください(a/b): "
if %A_B%==b (
move %alllog%%file% %STR_INPUT%\before\
xcopy /e /y %alllog%\ %STR_INPUT%\before\
rmdir /q /s %alllog%\NCS
echo beforeに移動完了しました。
pause
cls
) else if %A_B%==a (
move %alllog%%file% %STR_INPUT%\after\
xcopy /e /y %alllog%\ %STR_INPUT%\after\
rmdir /q /s %alllog%\NCS
echo afterに移動完了しました。
pause
cls
)else (
echo 無効な文字列です。a or b の入力をお願いいたします。
pause
cls
)
cls
goto MEN
このコード以下は同じような処理となっているので、代表として ALL の処理を解説します。
set /P A_B=”beforeかafterか選択してください(a/b): “ についてはALL独自の処理です。
これは前提の移動元フォルダをご覧いただければわかる通り、取得logが同一のため、作業前後で同じフォルダに格納してます。
しかし、移動先はbeforeとafterでフォルダを分けているため、その判定をユーザーにしていただくための処理です。
if %A_B%==b (
move %alllog%%file% %STR_INPUT%\before\
xcopy /e /y %alllog%\ %STR_INPUT%\before\
rmdir /q /s %alllog%\Ap
echo beforeに移動完了しました。
pause
cls
)
まずは b が選択された際の処理です。
move コマンドで logを移動します。
%alllog%%file% → \Users\test-pc\log\all\*.log を
%STR_INPUT%\before\ → C:\Users\test-pc\log\test\No1\before\ に
格納します。
続いて xcopy コマンドでフォルダごとコピーし、 rmdir コマンドで移動元フォルダを削除します。
※moveだとフォルダの移動はできないので、、
%alllog% → \Users\test-pc\log\ 配下のフォルダを
%STR_INPUT%\before\ → C:\Users\test-pc\log\test\No1\before\ に
格納します。
/e でフォルダの中身ごとコピーできます。
/y で上書きの確認メッセージを省略します。
その後、移動元のApフォルダを削除します。
pause は何かボタンを押すまで処理を一時停止するコマンドです。
設定することで前述の echo で指定した
「beforeに移動完了しました。」
の文字列をユーザーが確認できるようにします。
最後に cls でコマンドプロンプト上のテキストをクリアして、後続の処理に繋げます。
Download
以下が実際に使用しているbatです!ご自由にどうぞ!
ご自身の環境に合わせて変更するのをお忘れなく
log_move
最後までご覧いただきありがとうございます!
それでは良いエンジニアライフを!!
コメント