« | »

2012.04.10

コマンドプロンプトで文字列置換

ふと解決したので覚え書き。

アニメの録画後にDOSバッチつかって自動でtsファイルを分割したり分離したりしてるのだが、いずれも最後に番組名ごとのディレクトリに移動させている。

本来ならEPGの番組名を取得してそれをディレクトリ名に指定すれば良いのだが、テレ東などでは番組名の部分にサブタイトルを併記してしまっているため、これでは毎週新しいディレクトリが掘られてしまう。
それの回避策として自動検索予約のキーワードをディレクトリ名にするように組んでいるのだが、これも「not 否定キーワード」の検索否定条件がある場合

番組名 not 否定キーワード

と言うディレクトリが作られてしまい、なんだか格好が悪い。

ってなわけで、いままでは否定キーワードの置換部分を

※ setname に検索キーワードを格納

set setname=%setname: not ぷらす=%
set setname=%setname: not ベツバラ=%

等、バッチファイルに直打ちしていたのだが、

set setname=%setname:!=!%
setlocal ENABLEDELAYEDEXPANSION
set notname=%setname:* not =%
set setname=!setname: not %notname%=!
setlocal DISABLEDELAYEDEXPANSION

にして「not 否定キーワード」の部分を自動で取得するようにしてみた。
これで %setname% には「not 否定キーワード」が抜かれた文字列が格納される。もともと「not 否定キーワード」が無い場合はマッチしないので問題なし。

環境変数の遅延展開を使ってるので setlocal ENABLEDELAYEDEXPANSION 必須。
最後が ENDLOCAL じゃないのは、どうも遅延展開を通した変数は ENDLOCAL を指定した時点でクリアされてしまうみたいだから。
詳細は調べてないからわかんない。

因みにわざわざ遅延展開を無効に戻すのは、キーワード自体は1行目で全角の「!」に置換してるからいいんだけど、もしどこかの変数内に「!」等の文字が含まれていると遅延展開の変数だと思ってしまうみたいだから。
詳細は調べてないからわかんない。

setコマンドの置換にワイルドカードが後方一致でも使えればもっと簡単なんだけど、先頭でしか使えないのでこんな事になった。もっとも、番組名自体に「 not ~」的なタイトルを含む場合は問題が起こるが、それは手動で対処。

ぶっちゃけ何じゃこりゃなスクリプトだけど覚え書きだからいいやw
vbs書いた方が手っ取り早いというツッコミは無しの方向で。

トラックバック URL

コメント & トラックバック

コメントはありません。

Comment feed

コメント





XHTML: 下記のタグが使用出来ます。:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

日本語が含まれない投稿は無視されますのでご注意ください(スパム対策)。また、コメントは管理者の許可制のため投稿後すぐには反映されません。