LoginSignup
0
2

More than 1 year has passed since last update.

[Windows]任意のフォルダへbatファイルをフォルダごとコピーしコピー先でbatファイルを再実行するbatファイル

Posted at

はじめに

不特定多数の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節以降の記述

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2