--- lang: ja-jp breaks: true --- # bat ファイル実行中に powershell で tail コマンドのようなログ表示を行い、処理が終わったら自動的に閉じる 2024-03-14 > Windowsバッチまとめ 補足: バッチで出来ないことを他の仕組みで補う > https://qiita.com/tomotagwork/items/5a0e418ceca9b816df51 > ## KillPowershell.bat ```bat= @echo off setlocal enabledelayedexpansion cd %~dp0 set PIDFile=%1 if exist "%PIDFile%" ( set /p targetPID=<%PIDFile% tasklist /fi "PID eq !targetPID!" | find "powershell.exe" > nul if not ERRORLEVEL 1 ( goto RUNNING ) else ( del %PIDFile% goto NOT_RUNNING ) ) else ( goto NOT_RUNNING ) :RUNNING echo kill process: !targetPID! taskkill /F /PID !targetPID! del !PIDFile! goto END :NOT_RUNNING echo not running goto END :END ``` ## 呼び出し側のバッチファイル ```bat= rem utf-8に変更 chcp 65001 @echo off rem 実行確認 SET /P ANSWER="XXXXXXXXします。よろしいですか (Y/N)?" if /i {%ANSWER%}=={y} (goto :yes) if /i {%ANSWER%}=={yes} (goto :yes) EXIT :yes rem ログファイル情報 SET LOG_FILE_TITLE=%~n0 SET LOG_NAME_DATE_=%date:/=% SET LOG_NAME_DATE=%LOG_NAME_DATE_:~0,8% SET LOG_NAME_TIME=%time: =0% SET LOG_NAME_TIME_H=%LOG_NAME_TIME:~0,2% SET LOG_NAME_TIME_M=%LOG_NAME_TIME:~3,2% SET LOG_NAME_TIME_S=%LOG_NAME_TIME:~6,2% SET LOG_FILE_NAME=%LOG_FILE_TITLE%_%LOG_NAME_DATE%_%LOG_NAME_TIME_H%%LOG_NAME_TIME_M%%LOG_NAME_TIME_S%.log SET PID_FILE_NAME=PID_%LOG_FILE_NAME% cd /d %~dp0 type nul > %LOG_FILE_NAME% powershell -Command "(Start-Process powershell -ArgumentList '-Command \"Get-Content -Encoding UTF8 %LOG_FILE_NAME% -Wait -Tail 1\"' -PassThru).id" > %PID_FILE_NAME% if %ERRORLEVEL% gtr 0 (goto :error) rem 処理を実行してログを出力 echo XXXXXXXX >> %LOG_FILE_NAME% 2>&1 if %ERRORLEVEL% gtr 0 (goto :error) echo 正常に完了しました。 TIMEOUT /T 5 rem tailを終了 KillPowershell.bat %PID_FILE_NAME% exit :error echo エラー発生!! pause exit ``` ###### tags: `bat` `PowerShell` `tail` `kill` `tasklist`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up