1
0

Mod用のdllファイルをコピー後, ソフトを自動的に起動するバッチファイルの作成 (Windowsでドライブ間の移動を伴う)

Posted at

前提条件

背景

  • 「ビルドした際にビルドしたファイルを別のフォルダにコピーし, コピー先のソフトを自動起動したい」という要望が入った為作成した。
    • ビルドするファイル => AmongUsのMod
    • 起動するソフト => AmongUs

環境

  • windows10 及び 11

各ファイルが存在する 及び 環境変数で指定されているドライブ

ファイルおよび環境変数(フォルダ) 役割 該当ドライブ
バッチファイル C
%Develop% プロジェクトファイルが存在しているフォルダ E
%AmongUs% build先のフォルダ C
%AmongUs%\BepInEx\plugins\SuperNewRoles.dll [*1]
ビルドしたコピー対象のファイル (Modのdll)
C
%AmongUsTest% 起動したいソフト(Among Us)が存在するフォルダ C
%AmongUsTest%\BepInEx\plugins [*1]のコピー先のフォルダ C

コード

全文

@chcp 65001
@echo off

pushd %Develop%
dotnet build

if %errorlevel%==0 ( GOTO :Success ) else ( GOTO :Miss )

:Success
echo +-------------------------------------------------+
echo    buildに成功しました
echo    ファイルをテストフォルダにコピーして, 起動します
echo +-------------------------------------------------+

copy /y "%AmongUs%\BepInEx\plugins\SuperNewRoles.dll" "%AmongUsTest%\BepInEx\plugins"
start "" "%AmongUsTest%\Among Us"
pause
exit
rem End :Success

:Miss
echo +----------------------------+
echo    buildエラーが発生しました
echo +----------------------------+
pause
rem End :Error

実行内容

  1. 環境変数で指定している, ビルドを行うフォルダに移動する。
  2. ビルドを実行する。
  3. ビルドが成功したか判定する。
  4. 3が成功していた場合 ファイルをコピーし, 失敗していた場合バッチファイルの実行を停止する。
  5. コピー先のフォルダのAmongUsを起動する。
  6. 入力待機し, 入力されたらバッチファイルの実行を終了する。

説明

前提記事


pushd %Develop%

  • 環境変数%Develop%で指定されているフォルダに移動する。
    • dotnet buildを実行する為に,
      プロジェクトファイル(SuperNewRoles.csproj)が存在するフォルダにコマンドプロンプト上で移動する必要がある。
    • 以降のコマンドはカレントディレクトリが何処であっても, 又ドライブを跨いでいても実行できる為, pushdコマンドの使用は一回のみ。

  • ドライブを跨ぐ移動が必要である為cdコマンドでは動作しない。
    • エラー再現画像
      • image.png

    • 移動に関わるファイルと, ファイルが存在する場所
      • バッチファイル : Cドライブ
      • プロジェクトファイル : Eドライブ

  • cdが使用できない為, その代わりにpushdを使用した。
    • ディレクトリのストックとしての用途では使用していない。

copy /y "%AmongUs%\BepInEx\plugins\SuperNewRoles.dll" "%AmongUsTest%\BepInEx\plugins"

copy /y "A_Folder\A'.dll" "B_Folder"

  • A_Folderに存在するA.dllというファイルを"B_Folder"にコピーする。
  • copy /y "[コピーしたいファイルのパス]" "[コピー先のフォルダのパス]"
    という構造になっている。

オプション : /y

  • コピー先に, コピーしたファイルと同名のファイルが既にある場合,「上書き保存をするか」のウィザードを表示せずに, 上書き保存を行うオプション
    • コピー先には必ずコピーしたファイルと同名のファイルがあり, 更にファイルを書き換える事を目的にしている為, このオプションを使用している。

exit

  • コマンドプロンプトを終了する。

  • このコードを使用しない場合, ビルド成功時(GOTO:Successに飛ばされた場合)も, ビルド失敗時のコード(:Miss)を読む。
    • GOTOは該当するラベルに飛ばすだけの為, 飛んだ先のコードはラベルの存在によらず全て読まれる。

    • 終了を明示する必要がある。
        1. GOTOでファイルの最後に移動する。
        2. exitでコマンドプロンプトする事で, バッチファイルの実行を停止する。

      • 例2. の方法を使用した理由 :
        • ビルド成功時と失敗時で最終の処理が異なる為。
          • 成功時はコンパイルのログを見ない為, コマンドプロンプトを閉じる。
          • 失敗時はコンパイルエラーを確認する為, コマンドプロンプトを閉じない。

参考

1
0
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
1
0