拡張子が.csのファイル一覧を取得する場合の例
where /R C:\source\repos "*.cs"
/Rをつけると、サブフォルダも含めて検索される。
まず、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」)を実行している。(後続の処理でエラーレベルを見ていなければ記述しなくても大丈夫)
それぞれの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/
次のnotepad.exeの部分を書き換える
taskkill /im notepad.exe /f
実行すると強制終了したプログラムのプロセスIDも含めて表示される(以下の例は2つ起動中であった場合に両方とも終了された例)
成功: プロセス "notepad.exe" (PID 15660) は強制終了されました。 成功: プロセス "notepad.exe" (PID 5492) は強制終了されました。
なお、該当するプログラムが起動中でない場合は「エラー: プロセス “notepad.exe” が見つかりませんでした。」といった文字が返る
次の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つも起動していない場合は、「利用できるインスタンスがありません。」という文字が返ってくる
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というプログラムが存在しないということになる。
単純なミスだった・・・
動作可能なバッチのサンプルが中々ないため作成。
このテンプレートをもとに目的のコマンド呼び出しを追加すれば、作業が捗る・・・かも。
@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の記載追加