はじめに
不特定多数のwindows端末へスクリプトファイル群やパッチを配布するために、
ファイル群をファイルサーバーなどに格納しローカルへのコピーと処理実行を1ファイルで実現したい事がありbatファイルを作成してみた。
処理概要
①変数'DEST_DIR'にコピーしたいディレクトリへのパスをセット
例ではc:\workとする
②batファイルを実行したフォルダへ移動
③'DEST_DIR'に定義したパスが存在しない場合、batファイルを実行したフォルダを'DEST_DIR'へコピー
④③で'DEST_DIR'へコピーしたフォルダでbatファイルが実行されていない場合、コピーしたフォルダでbatファイルを再実行
⑤実際に実行したい処理をMAIN節以降に記述
batファイル全文
batファイル全文
rem batファイルの実行フォルダが%DEST_DIR%以外の場合、batファイルの実行フォルダを%DEST_DIR%にコピーしbatを再実行
rem batファイルの実行フォルダが%DEST_DIR%の場合、MAIN節の処理を実行
rem -環境変数解説-
rem DEST_DIR -> フォルダのコピー先フォルダのパスを指定。(任意)
rem THIS_PATH -> 本batファイルのパスが設定される。
rem FOLDER_NAME -> 本batファイルが格納されているフォルダ名が設定される。
rem BAT_NAME -> 本batファイルのファイル名が設定される。
rem WORK_DIR -> batファイルコピー先フォルダのパスが格納される。DEST_DIR\FOLDER_NAME=WORK_DIRとなる。
rem BAT_FULLPATH -> batファイルコピー先のフルパスが格納される。WORK_DIR\BAT_NAME=BAT_FULLPATHとなる。
rem =====================================================================================
rem set DEST_DIRにコピー先のフォルダのパス、MAIN節にメインの処理内容を記載し使用してください。
rem =====================================================================================
rem ローカルの作業フォルダ(batを含むフォルダのコピー先)を%DEST_DIR%に定義
set DEST_DIR=C:\work
rem batファイルのカレントディレクトリ名を%FOLDER_NAME%に定義
setlocal
set THIS_PATH=%~dp0
for %%1 in ("%THIS_PATH:~0,-1%") do set FOLDER_NAME=%%~nx1
rem batファイル名を%BAT_NAME%に定義
set BAT_NAME=%~nx0
rem batファイルを再実行するフォルダ%DEST_DIR%\%FOLDER_NAME%を%WORK_DIR%に定義
set WORK_DIR=%DEST_DIR%\%FOLDER_NAME%
rem batファイルのフルパス%WORK_DIR%\%BAT_NAME%を%BAT_FULLPATH%に定義
set BAT_FULLPATH=%WORK_DIR%\%BAT_NAME%
rem batファイルが格納されたフォルダへ移動
pushd %THIS_PATH%
rem %WORK_DIR%が存在しない場合、%DEST_DIR%へ%THIS_PATH%をコピー
if not exist "%WORK_DIR%\" (
xcopy /i /e /y "%THIS_PATH%" "%WORK_DIR%"
)
rem batファイルの実行フォルダを確認し、%WORK_DIR%でbatが実行されていない場合、%BAT_FULLPATH%を再実行
if "%THIS_PATH%" neq "%WORK_DIR%\" (
powershell start-process %BAT_FULLPATH%
goto exit
) else if "%THIS_PATH%" equ "%WORK_DIR%\" (
goto MAIN
)
:MAIN
rem =====================================================================================
rem 以下メイン処理を記述
rem =====================================================================================
:exit
exit
終わりに
主にps1ファイルをbatファイルから実行させたい場合に使用している。
配布、処理させたい内容が変わった場合に修正する必要があるのは以下の2点。
①コピー先のフォルダ指定
set DEST_DIR=C:\work
②MAIN節以降の記述