雑に作ったPythonスクリプトを雑に使う - 再戦
TL;DR
- 前のエントリでどう見てもスマートでない方法について書いたが、案の定もっといい方法があった。
- 「もっといい方法」はバッチファイルで実現されると知り、今まで敬遠してたバッチについて勉強した。
- バッチの力で件の問題にリベンジする。
本編
経緯
そもそも前のエントリで解決したいと言っていた問題を要約すると:
- 以下のような真似ができるようになる
deploy.exe
が欲しい!
適当に作ったスクリプトをdeployすると…… C:\some\dir> echo print("hoge") > hogehoge.py C:\some\dir> deploy hogehoge.py どこからでも拡張子なしで呼び出せる! C:\some\dir> cd C:\another\dir C:\another\dir> hogehoge hoge
- なんで
deploy.exe
が欲しいかというと、.bat
は呼ぶときに拡張子まで書かなくちゃいけなくて面倒だからだ!
……ということだったのですが、既にここに勘違いが1つありまして、
.bat
は呼ぶときに拡張子まで書かなくちゃいけなくて面倒
は 誤り でした。というのも、PATHEXT
環境変数というのがあるそうで*1、ここに設定された拡張子は省略しても実行可能、しかも .bat
はデフォルトでここに含まれている というのです*2。し、知らなかった……。
僕が.bat
を使わなかった理由なんて
.bat
は呼ぶときに拡張子まで書かなくちゃいけなくて面倒
以外に何もないので、PATHEXT
の存在を知った今、わざわざ.exe
なんて錬成するなんて面倒なことをしたくはありません*3。今こそdeploy.bat
を作るときです!
ところが、今まで.bat
なんか使いたくないやいと思い続けてきたので、書き方が微塵もわからない。というわけで少し勉強しました。もう無敵です。首洗って待ってろよdeploy.bat
!
解決編
大見得を切りましたが、実はdeploy.bat
の書き方はコメントでほとんど教えてもらっていたりしました。その長さわずか2行。ほんまdeploy.exe
なんだったんやアレ。
以下は、.py
以外の拡張子に対応したり、スクリプトに引数を渡せるようにしたりしただけのやつです。前のやつ合計130行くらいあったけど、これ30行くらいですね。なんでも勉強しておくもんだなあ……。
どうやって読むかはバッチファイル勉強エントリでも参考にしてください。以上!
@echo off if "%1" == "" ( echo Usage: %0 ^<script-path^> exit /b 1 ) setlocal enabledelayedexpansion set batDir=batを置いておく場所 set scrDir=スクリプトを置いておく場所 set run[.exe]=call set run[.bat]=call set run[.py]=python set run[.exs]=elixir if not exist %~1 ( echo File Not Found: %~1 exit /b 1 ) if not defined run[%~x1] ( echo Extension "%~x1" is not supported. exit /b 1 ) copy %~f1 %scrDir% > nul echo @!run[%~x1]! %scrDir%\%~nx1 %%* > %batDir%\%~n1.bat endlocal