28
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Bat(*.bat)で色々やる時のメモ

Last updated at Posted at 2016-03-30

#概要
bat作成時の個人用メモ

テンプレ

※テンプレ利用時の注意点
JenkinsのWindowsバッチコマンドの実行でこのbatファイルを利用すると
マルチバイト文字が入っている為エラーが発生します。
日本語部分を消してもらえれば使えます。

template.bat
@echo off

rem ------------------------------------
rem infomation
rem batの説明を記載

rem ------------------------------------
rem setting
rem 各種設定
set CurDir=%~dp0

call :CLEAR_SCREEN

rem ------------------------------------
rem 実装部
:EXEC


rem ------------------------------------
rem 終了処理
:END

:: pauseはデバッグ終了時に外す
pause

:: /B 呼び出し元へ戻る
exit /B

rem ------------------------------------
rem ログ消去
:CLEAR_SCREEN

cls
exit /B

rem ------------------------------------
rem EOF

引数表示

:: 引数1をそのまま表示
echo %1
:: フルパスにして表示
echo %~f1
:: 引数1をドライブ文字とパス
echo %~dp1
:: 引数2をファイル名のみにして表示
echo %~n2
:: 引数2をファイル名+拡張子のみにして表示
echo %~nx2

rem D:\tmpで引数1にhoge 引数2にfoo/poi.txtを入れて実行した結果
hoge
D:\tmp\hoge
D:\tmp
poi
poi.txt

ドロップされたファイルを操作

:: 1ファイルのみドロップされた場合 %1にパスが入っています。
echo %1

:: 複数ファイルドロップされた場合
for %%f in (%*) do (
  echo %%f
)

コマンド結果を変数に入れる

:: コマンド結果を%%iに入れて 表示
for /f "usebackq" %%i in (`コマンド`) do (
  echo %%i
)

:: 指定ディレクトリ以下の特定ファイル見つけてきて表示
for /f "usebackq" %%i in (`dir /b /s RomDir\*.zip`) do (
  echo %%i
)

:: 直下のディレクトリを見つけてきて表示
for /f "usebackq" %%i in (`dir /b /ad`) do (
  echo %%i
)

:: lsの結果を表示
for /f "usebackq" %%i in (`ls`) do (
  echo %%i
)

アプリの起動/再起動

何かを起動時にデバッグツールを起動したい時に使用

startAppIfNeeded.bat
rem アプリが起動済みなら起動しない。起動してないなら起動する。
set AppFile=poi.exe
set AppPath=%CurDir%tool\%AppFile%
for /f %%i in ('tasklist /fi "imagename eq %AppFile%" 2^>^&1') do (
    if /i %%i==%AppFile% (
        goto END
    )
)
start %AppPath%
:END
exit /B

下位互換性の無いデバッグツールを使う場合
すでに起動しているなら殺してから
使用可能なバージョンのデバッグツールを立ち上げる為に使用

restartApp.bat
rem アプリが起動済みなら再起動する。
set AppFile=poi.exe
set AppPath=%CurDir%tool\%AppFile%
for /f %%i in ('tasklist /fi "imagename eq %AppFile%" 2^>^&1') do (
    if /i %%i==%AppFile% (
        taskkill /im %AppFile% /f
    )
)
start %AppPath%
:END
exit /B

フォルダ作成

:: フォルダがあったら消してから作成
if exist %TargetDir% (
  rd /s /q %TargetDir%
)
mkdir %TargetDir%

```bat
:: フォルダが無ければ作成
if not exist %TargetDir% (
  mkdir %TargetDir%
)

テキストファイルを1行ずつ読み込む

for /f "delims=" %%c in (poi.txt) do (
  echo %%c
)

テキストファイルの読み込みを利用してVisualStudioプロジェクトをビルドする

slnファイルと同じディレクトリに配置して使用します。
別途記載したビルド対象ファイルを元にビルドを行います。

build.bat
@echo off

set ProjectRoot=%~dp0

rem ------------------------------ 
rem 設定
::1つ上のフォルダ名を取得してソリューション名として利用
for %%I in (.) do set SlnFileName=%%~nI%%~xI
::msbuild.exeへのパスを確保
set MicrosoftBinRoot="C:/Program Files (x86)/MSBuild/12.0/Bin/"
set MsBuildPath=%MicrosoftBinRoot%msbuild.exe

rem ------------------------------ 
rem 実装部

for /f "delims=" %%c in (configuration.txt) do (
	for /f "delims=" %%p in (platform.txt) do (
		%MsBuildPath% %SlnFileName%.sln /t:rebuild /p:PlatformToolset=v120 /p:Configuration=%%c /p:Platform=%%p
    )
)

rem EOF
configuration.txt
Debug
Develop
Release
platform.txt
Win32
X64
28
29
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
28
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?