カテゴリー: OS

覚え書き: バッチファイル

以下は本当はがっつりバッチファイルについて調べてエントリ化しようと思ったが、途中で目的を達成してしまったが為にただの残骸となってしまった文章である(ノ∀`)


Windowsにおけるバッチファイルとは

バッチファイル(バッチプログラム/スクリプト)

型式が決まっている繰り返し作業等の一連の処理をWindows上で自動的に実行バッチ処理する為の手順をWindowsコマンドで記述したテキストファイル。

時代背景等、より詳しい内容は以下を参照。
batchが指すものは何か? IT業界独自の概念「一般化」を理解しよう

batch
(パン・陶器などの)ひとかまど、ひと焼き分、1 度分、ひと束、一群、一団

script
(演劇・映画・ラジオ放送などの)台本、脚本、スクリプト、手書き、筆跡、筆記体(活字)、スクリプト体、文字、答案


拡張子の違い (bat or cmd)

拡張子にはbat,cmdが用いられる。

bat拡張子はDOS時代から使い続けられていて、cmd拡張子は32ビットOSのNT系以降で使用され始めた模様。

cmd拡張子は非NT系環境でそのスクリプトが実行されないようにする為に明示的にbatと使い分けがされていたようだが、今は非NT系のWindowsやDOS環境はほぼほぼ姿を消しており、また依然としてbat拡張子を使い続ける風潮があった為か、現在では基本的にどちらでも良いようである。

実行可能ファイルの拡張子を指定する環境変数「PATHEXT」には
".COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"
といった順で記載されているので、Microsoft的には特にbat拡張子を使わずにcmd拡張子を使えと強制はせず、もしも使い分けたいのであれば、ユーザー側で考えて選択しろということなのだろうか。

尚、細かな違いとして、ERRORLEVELが"0"でない状態で、"PATH/APPEND/PROMPT/SET/ASSOC"等を実行した場合、batだとERRORLEVELに以前の非"0"の値が残り、cmdでは"0"にリセットされるらしい。

例えば下記の内容を拡張子を変えて実行すると、

@echo off
type
PATH
echo %errorlevel%

以下のような結果になる。(typeコマンドがエラー 1を返すが結果が異なる。)

Windows batch files: .bat vs .cmd?


コマンドシェルとは

(コマンドラインシェル/コマンドラインプロセッサ/コマンドラインインタプリタ)

本義としてはユーザーがOSに命令・利用するためのユーザーインターフェイスを提供するプログラムであるが、バッチ処理という観点から見た場合、バッチファイル内の命令群を逐次解釈し、処理を行う実行エンジンと考えても差し支えはないと思われる。

NT系ではcmd.exeがデフォルトのコマンドシェルである。(それ以前はcommand.com)
このコマンドシェルの指定は環境変数「ComSpec」の値で決定される。
※Windows10でのデフォルト値は"%SystemRoot%system32cmd.exe"となっていた。

現行のWindows10では従来型のコマンドシェルとこれを拡張したPowerShellを利用できる。

PowerShellではWindowsコマンドの他により多くの処理が可能なPowerShellコマンドレットを実行できる。
具体的には.NET Frameworkのクラスを利用できる。

Windows のコマンド

この他にスクリプト実行環境としてWindows Scripting Host(WSH)がある。
こちらはVBScriptやJScriptで記述し、WMIを始めとするCOMオブジェクトを利用できる。

WSH環境は上記のコマンドシェルと異なり、ファイルとして存在するスクリプトを実行する。

つまり上記のコマンドシェルのようなユーザーインターフェイス的部分がない単純な実行エンジンと言える。
バッチファイルすらまだまだ現役なので、当然ながらWSHもまだまだ現役である模様。


色々調べてて思ったけど、もう今更バッチファイルについて勉強するならWSHやPowerShellの勉強をしたほうがいいなってちょっと思った(ノ∀`)

ストアアプリ版Paint.Netに複数画像を"送る"

俺氏が日頃使用している画像編集ソフトは『Paint.NET』である。

ある時、ストアアプリ版が出ているのに気づき、「寄付はあれだけど、まあ還元もしないとね(・∀・)」と購入した。

今回、20H2のクリーンインストールに際し、従来のexeタイプはインストールせず、購入したストアアプリ(UWPアプリ)のみをインストールした。

で、いざ使ってみようとして困惑した…

ストアアプリをSendToでどうやって使うんや…(´・ω・`)


結論から言うと、以下の内容のバッチファイルを作り、それ自身またはショートカットをSendToフォルダに入れておけば良いようだ。

ストアアプリはその作りによって必ずしも引数に対応していないらしいのだが、Paint.NETは1ファイルだけは取ってくれるようなので、再帰的にURIスキームに引数を渡して呼び出す形にした。

一応これでエクスプローラー上で複数ファイルを選択して"送る"ことが出来た∩( ・ω・)∩

@echo off

for %%a in (%*) do (
  start paintdotnet:%%a
)

※SyntaxHighlighterでbatファイルを装飾表示させるには追加のファイルやら設定が必要らしいので、javaで表示(ノ∀`)

上述の通り、ストアアプリの作りによって変わってくるけれども、まあこのやり方でストアアプリに対してSendToを使えるようだ。

本当はファイル拡張子等をチェックして、画像ファイルじゃなかったら弾くようにするべきだが、面倒くさいので、そこは運用でカバー(・∀・)

よくよく考えてみると、SendToに入れるのバッチファイルじゃなくてVBSとかでもいけるんかな?
※VBSでURIスキームを叩く方法がわからんかった(ノ∀`) デキナイノカナ?


[参考]

ストアアプリのURIスキーム等については以下のページを読んだ。
ZipPla の外部アプリに UWP版 NeeView を登録する方法
Windows 10のMicrosoft Storeアプリをコマンドラインやバッチから起動する

for文に関しては、幾つかのページを彷徨う内になんとなくわかった。
for
バッチファイルでコマンドライン引数を扱う
知識ゼロからのwindowsバッチファイル超入門

ほとんどのページでデフォルトのデリミタは空白とタブとあったが、なんかカンマも指定しなくても機能していたような気がする。
一体これはなんなんだろうか?

プライバシーポリシーのなんちゃらこうちゃらで…

「アプリの公開を停止しちゃるでー(・∀・)」とごっぐるからメールが来た。

"Google Play配布契約 4.8 への違反対応"とか言うやつ(´・ω・`)?
よくわからんからぐぐった。

結論から言うとadmobやfirebaseを使ってるとそれらがやっている情報収集がGDPRとかその辺のなんらかに抵触するからプライバシーポリシーの表示をするようにしないと駄目よんというようなお話らしい(・∀・) ←ヨクワカッテナイ

プライバシーポリシーの項目はGoogle Play Consoleのアプリのページ内にあったが、しばらくは用意しなくても大丈夫そうだったので放置していたのがいけなかったのだ(ノ∀`)

参考:
AdMob, Firebase付きAndroidアプリのプライバシーポリシー、こうしてみました(要経過観察)
【広告ID】Google Play配布契約 4.8 への違反対応


参考にしたページの方やら、他の人達はadmobとfirebaseの2つを使っているので、その2つに対するプライバシーポリシー宣言文(?)を用意していたが、俺氏のアプリは今の所admobだけなのでfirebaseの方は端折った。admobの方の文をまるごとパクり参考にプライバシーポリシー宣言用のHTMLを作った。

参考ページその他を読んでいると、アプリ側でも初回起動時に強制的に表示するか、広告IDの収集をやめさせないといけないよう(UnityでそれをやるためにはAndroidManifest.xmlをいじらなくちゃいけないような雰囲気)だったので

取り敢えず、この件は放置することにした(ノ∀`)

更新をかけるにはまだ中学生漢字のデータが出来ていないし、もし更新するなら、その他のバグというかデータの誤りも直して出したいし。どうせ公開していてもユーザーは全然増えてないしw


などと思ってGoogle Play ConsoleのプライバシーポリシーのURLを追加して、「アップデートを送信」とかいうボタンをクリックした。

それでまぁ、そのことは忘れて他のことをやっていた。
しばらくしてAndroid端末を見たら、アプリの更新要求が表示されていた。従った。

それからまたしばらくしてAndroid端末を見たら更新が終わっていた。
何故かその中にMole's Match-upのアイコンがΣ(゚∀゚;)

俺氏が寝ている間に小人さん達が勝手にバグ取りとかデータ内容の更新をしてリリースしてくれたんだな(・∀・)と呑気に考えてみたが、そんなはずもなく。

まあ普通に考えたらプライバシーポリシーURLの更新によるものだろう……
で、それもまあともかくとGoole Play Consoleを見に行く。

あれ(´・ω・`)? 公開停止が解除されてね?

どういうこと(´・ω・`)?
プライバシーポリシーURLをGoogle Play Consoleに追記すれば解決するだけの話だったのかな?


まあ、どうでもいいか(・∀・)

取り敢えず、SSL化出来た模様(´・ω・`)

SSL化

だがしかし、具体的に何がどうなったらSSL化なのか、全く内容を理解していない(ノ∀`)

参考にしたエントリの「certbotのインストール」をやったらSSL化出来てしまったようなので「WordPressのSSL化」の方はやってないけど、やらないと駄目なのかしら(´・ω・`)?

一応、WordPressの「一般設定」の[WordPress アドレス (URL)]と[サイトアドレス (URL)]の値の頭を"https://"にしたけど、これも必要なのか必要じゃないか不明(ノ∀`)

「証明書の自動更新」もやったけど、きちんと動くかどうかは不明(ノ∀`)
数ヶ月後にSSLじゃなくなったら、またやり直す方向でw


なんかおかしい(´・ω・`)

うちのブログ、今では一日100もアクセスがない日がほとんどなのに一日2円くらいの課金が発生している(´・ω・`) 5日くらい前にこっちに移しただけなのに
「Network Internet Egress from Americas to Americas」で"1.7 gibibyte"になってる…

インストール後の色んな作業でネットワークトラフィックを浪費しちゃったのかしら(´・ω・`)?

それとも今まで適当にサイズを小さくせずに貼っていた画像達が問題なのか…
まあ一日2円くらいなら、良いは良いんだけども(´・ω・`)ソレクライナラハラエマス