【Windows Bat】ps1ファイルを呼び出す&日本語が化けないようにする

以下の2ファイルは同じフォルダに保存されている前提。
start.batをダブルクリックするだけで、ps1が実行されるようになる。

start.bat (※文字コードはShift-JIS)

@echo off
rem ps1ファイルをそのまま呼び出せるようにするため、「-ExecutionPolicy Bypass」を指定する
powershell -ExecutionPolicy Bypass -File "%~dp0main.ps1"
pause

 

main.ps1 (※文字コードはUTF-8 BOM付き)

# 現在日時を表示
Write-Host "PowerShellを実行しました! $(Get-Date -Format 'yyyy/MM/dd HH:mm:ss')"

【Windows Bat】【Tera Term】バッチファイルをダブルクリックするだけで、自動ログインできるようにする

以下の内容をbatファイルに保存すれば、ダブルクリックするだけで、ログインが完了した状態でTera Termが起動する。

start "" "C:\Program Files (x86)\teraterm\ttermpro.exe" 192.168.xxx.xxx /auth=password /user=root /passwd=p@$$w0rd

※IPアドレス、ユーザー名、パスワードは書き換えること。
※ユーザー名とパスワードを平文のまま保存することになるため、社内にある検証用サーバなどへのログイン時に利用することを推奨。

 

【Windows bat】特定のEXEが起動していたら強制終了する

まず、tasklistで該当のEXEが起動しているか確認する。
起動している場合は、taskkillで終了させる(ここではnotepad.exeが起動していたら強制終了させている)。

rem EXEが起動中か確認
tasklist | find "notepad.exe"

if %errorlevel% == 0 (
    rem 起動中の場合は、強制終了させる
    taskkill /im notepad.exe /f
) else (
    rem エラーレベルクリア
    cd > nul
)

尚、該当のEXEが起動していない場合はエラーレベルが1のままになるので、エラーレベルを0で上書きするように、正常終了する適当なコマンド(ここでは「cd > nul」)を実行している。(後続の処理でエラーレベルを見ていなければ記述しなくても大丈夫)

 

【Windows Bat】特定のページを指定したブラウザで開く

それぞれのEXEとURLを指定し、startコマンドで実行してあげればOK

echo Chromeで開く
start "" "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://www.google.com/

echo Edgeで開く
start "" "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" https://www.google.com/

echo Internet Explorerで開く
start "" "C:\Program Files\Internet Explorer\iexplore.exe" https://www.google.com/

【Windows Bat】プログラムを強制終了させる

次のnotepad.exeの部分を書き換える

taskkill /im notepad.exe /f

実行すると強制終了したプログラムのプロセスIDも含めて表示される(以下の例は2つ起動中であった場合に両方とも終了された例)

成功: プロセス "notepad.exe" (PID 15660) は強制終了されました。
成功: プロセス "notepad.exe" (PID 5492) は強制終了されました。

なお、該当するプログラムが起動中でない場合は「エラー: プロセス “notepad.exe” が見つかりませんでした。」といった文字が返る

 

参考

【Windows Bat】プログラムの起動時間とプロセスIDを取得する

【Windows Bat】プログラムの起動時間とプロセスIDを取得する

次のnotepad.exeの部分を書き換える

wmic process where 'name="notepad.exe"' get name,creationdate,processId

実行結果は以下の通り(起動日時、EXE名、プロセスIDが返る)

CreationDate               Name         ProcessId
20211202103244.517899+540  notepad.exe  11476

EXEが1つも起動していない場合は、「利用できるインスタンスがありません。」という文字が返ってくる

 

参考

【Windows Bat】プログラムを強制終了させる

【curl】【Windows bat】内部コマンドまたは外部コマンド~として認識されていません。エラーになる

curl https://juraku-software.net/?hoge=aaa&hoge2=bbb

として実行すると、

‘hoge2’ は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

となる。
(文字化け防止のため、コンソールの文字コードをchcp 65001で変更してから実行すると、
‘hoge2’ is not recognized as an internal or external command,
operable program or batch file.
になる)

この場合は、

curl "https://juraku-software.net/?hoge=aaa&hoge2=bbb"

のように”でURLを囲んであげれば、OK!

&は別のコマンドを指定するときに利用するため、hoge2というプログラムが存在しないということになる。

単純なミスだった・・・

【Windows Bat】バッチファイル(*.bat)テンプレート

動作可能なバッチのサンプルが中々ないため作成。

このテンプレートをもとに目的のコマンド呼び出しを追加すれば、作業が捗る・・・かも。

@echo off
setlocal
rem **************************************************
rem Windowsバッチファイルテンプレート v1.01 2017/08/23
rem https://juraku-software.net/
rem ★印のブロックを書き換えて使ってください
rem 
rem このテンプレートの仕様>>
rem バッチファイルの保存フォルダの下にLogフォルダを作成し、そこに日付のログファイルを作成する。
rem エラー処理のテンプレも兼ねて故意に誤ったパラメータを指定してPingコマンドを実行している。
rem **************************************************

rem ■ログファイル名取得(現在時刻)
set TIME2=%time: =0%
set NOW_DATE=%date:~0,4%%date:~5,2%%date:~8,2%_%TIME2:~0,2%%TIME2:~3,2%%TIME2:~6,2%
set LOG_NAME=Log\%NOW_DATE%.log

rem ■カレントディレクトリ変更
cd /d %~dp0

rem ■ログ作成
if not exist Log\ (
 mkdir Log
)
echo バッチ起動 %date% %time% > %LOG_NAME%

rem ■目的のコマンド★
echo コマンド開始 >> %LOG_NAME%
rem エラーを起こすために適当なパラメータを指定
ping -aaa >> %LOG_NAME% 2>&1

rem ■エラー判定
if %errorlevel% == 0 (
 rem エラー無し
 echo コマンド実行成功 戻り値:%errorlevel% >> %LOG_NAME%
 endlocal
 exit /b 0
) else (
 rem エラー有り
 echo コマンド実行失敗 戻り値:%errorlevel% >> %LOG_NAME%
 endlocal
 exit /b %errorlevel%
)

rem ■終了

変更履歴
2017/08/23 setlocal~endlocalの記載追加