見出し画像

バッチファイルを使いURLだけを入力して連続でyt-dlpを起動する(+バッチファイル作成時に有用なページ)

先日作ったバッチファイルでyt-dlpを概ね快適に使っているものの、いくつも動画を保存したい場合に1回ずつバッチファイルを起動することすらメンドウになってきた(面倒くさがりすぎ)
いっそのこと、動画閲覧時に最初にバッチファイルを起動しておき、保存したい動画に出会ったらURLだけコピペで実行できるようにならないかな…と思い、バッチファイルの改良版を作ることにした。


URLを入力しながらyt-dlpを連続実行するバッチファイル

やりたいことをまとめる。

  • 最初にコマンドプロンプトの画面を開いたらあとはずっと同じ画面が開きっぱなしでyt-dlpを起動したい。(現在のバッチファイルはexitで終了しているため、毎回コマンドプロンプトの起動から必要になる。単発の場合には閉じる手間が省けて便利なのだけども。)

  • いっそのこと、毎回バッチ名を入力することすら面倒くさい。なので、一度起動したら、後はURLだけ入力して実行、URLだけ入力して実行…という風に連続入力できるようにしたい。

  • いちおう、終わるためのコマンド入力を受け付けられるようにする(×ボタンでコマンドプロンプトを閉じればいいだけではあるが、気分の問題)

  • cookieを使うかどうか、オプション的に入力できるようにしたい。

URLをコピペで入力できるよう、バッチファイルの中で入力を受け付けるには、「set /p 変数名="表示メッセージ"」を使う。
問題は第4項の「オプション的な入力」である。
イメージとしては、URLを入力する際に、「lg 」を前に付けて入力した場合にはcookieを使うようにしたい。
文字列処理が必要になるのでやり方を検索してみたところ、「%変数名:~開始位置,文字数%」という記述で実現可能っぽい。

%V%             変数Vの値全体
%V:~m%       m文字目から、最後まで
%V:~m,n%    m文字目から、n文字分
%V:~m,-n%   m文字目から、最後のn文字分を除いたもの
%V:~-m%     後ろからm文字目から、最後まで
%V:~-m,n%   後ろからm文字目から、n文字分
%V:~-m,-n%  後ろからm文字目から、最後のn文字分を除いたもの
%V:c1=c2%    文字c1を文字c2に置換する。それぞれ複数の文字を指定することも可能

https://www.upken.jp/kb/kZwpzAqblKfZDjtMXuWuwioeExKNdE.html

上記引用で言う「m文字目から」というのは、感覚的には「m+1文字目から」となっている様子。具体的には、

C:\>SET STR=abcdefg
C:\>ECHO %STR:~2%
cdefg

https://www.upken.jp/kb/kZwpzAqblKfZDjtMXuWuwioeExKNdE.html

「abcdefg」という文字列の2文字目は「b」であるが、「m文字目から、最後まで」である「:~2%」と指定すると、3文字目の「c」以降が結果として返されている。
つまりどちらかというと、「m文字目から」ではなく、「m文字を読み飛ばして」がニュアンスとして正しく感じる。

上記を踏まえ、完成したバッチファイルが次のとおり。

@echo off
REM 連続DL(Exit無し)
setlocal
:INPUT_CHECK
echo.
set d=
set tid=
set opt=
echo 終了する場合は"exit"と入力。ログイン情報を使用する場合は"lg"と入力し、空白区切りに続けてURLを入力。
set /p d="URLを入力:"
if "%d%"=="" goto :INPUT_CHECK
if "%d%"=="exit" goto :EXIT_GATE
set tid=%d%
if %d:~0,2%==lg set opt= --cookies cookies.txt
if %d:~0,2%==lg set tid=%d:~3%
echo.
echo OPTION = %opt%
echo URL    = %tid%
echo.
yt-dlp --output "【ここにDL先を入力】\%%(title)s [%%(id)s](%%(uploader)s%%(uploader_id)s,%%(upload_date)s,%%(duration>%%Hh%%Mm%%Ss)s).%%(ext)s"%opt% --embed-thumbnail --format "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4] / bv*+ba/b" --console-title "%tid%"
echo.
echo ------------------------------------------------------------
goto INPUT_CHECK
:EXIT_GATE
endlocal

これで「動画見ながら、気が向いたら保存」がだいぶ快適にできるようになったと思う。
ただ、やっぱりChrome拡張とかで実装できれば、もっとラクになるかなぁ。

バッチファイル作成時に有用なページ

バッチファイルを記述する際、細かいことは頭に入っていないので適宜調べながら作成するわけだが、そういう時に便利そうなページをここにまとめておく。(随時更新)

バッチファイルでよく使う書き方まとめ

・テンプレート(1) 引数を受け取らないバッチファイル
・テンプレート(2) 引数を受け取るバッチファイル
・メッセージ付きで標準入力を受け付ける
・改行のみ標準出力する
・改行せずに標準出力する
・標準出力をクリップボードにコピー
・乱数(精度は期待しないこと)
・数値計算
・自身に渡されたパスを一つずつ処理する
・自身に渡されたパスから一部(ファイル名のみとか)を取り出す
・ノンブロッキングにファイルを開く
・エイリアス
・ワンライナー(複数のコマンドを一行で実行)
・タイトル文字列を変える
・プロンプトを $ にする
・ウィンドウサイズを変える
・現在日時文字列を得る
・Slice やら Replace やら
・秒単位スリープ(精度は期待しないこと)
・指定回数だけループを回す
・遅延展開(ループ中の変数更新を意図通りに動作させる)
・何もしない処理(Python でいう pass みたいなやつ)
・複数行コメントアウト
・関数/サブルーチン

https://qiita.com/sta/items/8cab80fe74b8dcfa5336

.bat(バッチファイル)のifコマンド解説。

1.ifコマンドの基本
2.ifコマンドの構文①~ == ~
3.ifコマンドの構文②~ 比較演算 ~
4.ifコマンドの構文③~ errorlevel ~
5.ifコマンドの構文④~ exist ~
6.ifコマンドの構文⑤~ defined ~
7.ifコマンドの構文⑥~ cmdextversion ~
8.ifコマンドの注意点・応用
 1.==とequの違い
 2.if文の入れ子には気を付けよう

https://qiita.com/plcherrim/items/8edf3d3d33a0ae86cb5c

BATタグの一覧

・BAT 1行を複数行へ展開、複数の処理を1行で記述する方法
・BAT で IF 文のサンプル
・BAT でファイルの任意の行を読み取る
・BAT ファイルで DHCP の MAC アドレスをまとめて登録する
・BAT ファイルでファイル、フォルダの存在確認
・BAT ファイルで変数に特定の文字列が含まれているか確認する
・BAT ファイルで引数を取得
・BATファイルでメニュー表示
・BATファイルで動的な変数指定
・BATファイルで四則演算
・BATファイルで文字列の切り出し
・FOR のヘルプ
・SET のヘルプ
・コンソールでログオンした場合に処理するサンプル

https://www.upken.jp/kb/tag/BAT

バッチファイルでの試行錯誤を回避するためのメモ

・とりあえずバージョン情報。
・環境変数の遅延展開はなるべく使わない
・変数名の先頭文字が単一文字変数とかぶらないように注意する
・「ERRORLEVELがNに等しい場合」と書きたい
・「%~dp0」の末尾の「¥」を除去したい
・if文やfor文の書き方をすぐ忘れてしまう…
・ifの条件文とその直後の(の間には半角スペースを入れよ
・for文のinと(の間にはスペースを入れよ
・コマンドプロンプトで単一文字変数を使用するときは%a
・文字列を囲むダブルクォーテーション
・リテラル文字列内の(``)はエスケープせよ
ほか多数。

https://qiita.com/yz2cm/items/8058d503a1b84688af09

この記事が気に入ったらサポートをしてみませんか?