きっかけ
Win+Gで起動するXboxゲームバー、動画が簡単に撮れます。
Edgeの画面を撮った時に出来上がるファイルがなでしこでファイル名変更ができないので ※詳細は後述
仕方なくファイル名変更のバッチファイルの作り方を調べてみた
サンプルをコピーして、ちょっと弄れば出来上がり……
for %%F in (*.mp4) do call :sub "%%F"
goto :EOF
:sub set BEFORE=%~1 set FILENAME=%~n1 set EXTENSION=%~x1 set AFTER=%FILENAME:~-19%%EXTENSION% ren "%BEFORE%" "%AFTER%" goto :EOF
……こわい!
文法がわからずにスクリプトの一部を弄るの、こわい!
リネームの記事は文法をしっかり解説しようと思いました。
リネーム記事なんてそこらへんにあるだろう、とかもう誰かがやってるから、
…とか言わずに、解説はネットに複数存在するほうがいい。
こわいので複数見比べる必要があるからです。
みんなで二番煎じの記事、書こう!
なでしこ1でファイル名を変更する
Edgeの画面をXboxゲームバーで動画で撮ると作成されるファイル名は
ページタイトル プロファイルx Microsoft Edge 日付・時間.mp4
となります
今回はここから日付と時間だけにします。
テストでとった検索結果を適当に動画ファイルに。
・変更前のファイル名
なでしこ ファイル名変更 - 検索 - プロファイル 1 - Microsoft Edge 2022-02-28 16-19-48.mp4
・変更後のファイル名
2022-02-28 16-19-48.mp4
・なでしこのプログラム
作業フォルダは「C:\Users\ユーザー名\Videos\Captures\」
変更前とは変数
変更後とは変数
拡張子とは変数
ファイル名とは変数
「*.mp4」のファイル列挙
それを反復
変更前は対象
拡張子は対象から拡張子抽出
対象を空に拡張子変更
ファイル名=それから19文字右部分
変更後=ファイル名&拡張子
デバッグ
//変更前から変更後へファイル名変更
おわり
それ
というのはなでしこの変数で、命令の戻り値がそれに入ります。
対象
もなでしこの変数で、反復
とセットで使います。
対象
には反復する配列の一要素が入ります。
なでしこではインデント(行頭の全角スペース)が必須で、文法上の意味があります。
反復
はループの命令で、インデントが下がるところまで行ったらループの開始に戻ります。
続いて、一行ごとの解説
作業フォルダは「C:\Users\ユーザー名\Videos\Captures\」
作業フォルダを指定すると相対パスでファイルの操作ができます。
~~とは変数
変数の宣言です。 変数宣言は省略しても大丈夫です。
このプログラムでは変更前、変更後、拡張子、ファイル名
がユーザー定義の変数です。
~~のファイル列挙
ファイル列挙
はファイル名を配列で返します。
作業フォルダにあるファイル名を配列にしてそれ
に返します。
それを反復
配列を使ってループを形成します。
配列の要素を一つずつ取り出しながら繰り返します。
ループに入るとき、取り出した要素は変数対象
に入ります。
変更前は対象
助詞「は」は変数への代入です。 一般的なプログラム言語の=に当たります。
拡張子は対象から拡張子抽出
助詞「は」は代入なので、「対象から拡張子抽出」の結果が入ります。
拡張子抽出は命令です。
「ファイル名.mp4」から拡張子抽出であれば「.mp4」の4文字が入ります。
なでしこでは拡張子は「.」を含みます。
対象を空に拡張子変更
拡張子変更
は実際のファイル名を操作するわけではなく、ファイル名とする文字列を作る命令です。
「ファイル名.mp4」を空(から)に拡張子変更であれば、「.mp4」が空になって「ファイル名」が返ります。
ファイル名=それから19文字右部分
文字右部分という命令があります。
文字左部分という命令もあるので、アレンジする場合はお好みで。
今回のサンプルでは「2022-02-28 16-19-48」の部分が19文字右部分です。
デバッグ
デバッグウィンドウが開く命令です。
変数の中身がわかるので、変数「変更後」に何が入っているか確認します。
//変更前から変更後へファイル名変更
//
で始まる行はコメントです。実行されません。
こわいのでまずはコメントアウトして実行します。
上記のデバッグ
で変数が思った通りの内容になっていたら//
を消し、デバッグ
のほうに//
をつけます。
ファイル名変更は命令です。 ファイル名が変わります。
おわり
おわり
は命令です(文法ではない)
なでしこのウィンドウが閉じます。
続いてデバッグウィンドウ
デバッグウィンドウはこんな感じ
変数「変更前」「変更後」が思った通りになっていたらコメントを外して再度実行します。
なぜファイル名変更できない動画ファイルができたか
サンプルのmp4はEdgeで起動したブラウザゲーの画面を動画にしたものです。
デバッグウィンドウの変更前…Microsoft? Edge 2022-02-28 16-19-48.mp4となっているのがわかるでしょうか。
間に?が混じってますね。
…エクスプローラ上ではそんなものはない。
正体は…ゼロ幅スペース。
なでしこは内部でSJISで処理しているので、unicodeの文字列処理には弱い。
こいつのせいでなでしこではリネームできなかったという話でした。
おまけ
Edgeには「名前とウィンドウ」というメニューからウィンドウに名前を付けるという機能があります。
これでウィンドウタイトルを変えてからXboxゲームバーで動画をとればゼロ幅スペースのない動画が撮れます。