プロが教えるわが家の防犯対策術!

こちらのパソコン、ミュジックフォルダ内にある音楽ファイル、アーティスト名のフォルダの中にアルバム名のフォルダがあり、その中に音楽ファイルが入っています。
こんなときこちらでは、曲リストを作るために、filelist.batなるバッチファイルを作りまして、曲リスト作りをすることがあります。
filelist.batの中身は、
dir /b %1 >
"%~n1.txt"
というような感じです。
これをsendtoフォルダに入れて、ミュージックフォルダの中のひとつのアルバムを選んで右クリックメニューから、filelist.batに送っています。

 そこで、アルバム名はこれで付けられるのですが、アーティスト名もファイル名に入れられないかと思うことがあります。
フルパスからひとつ上の階層を取り出してファイル名に入れられるといいのですが、どうも良い方法が思いつきません。
アイディアがある方はいらっしゃるでしょうか。

A 回答 (1件)

以下のような感じでいかがでしょうか。



―――――――――――――――――――――――

@echo off

rem ■ アーティスト名のフォルダへ移動
pushd "%~dp1"

rem ■ 変数「アーティスト名フォルダのパス」にカレントディレクトリのパスを代入
set "アーティスト名フォルダのパス=%CD%"

rem ■ 変数「アーティスト名フォルダのパス」の名前部分だけを変数「アーティスト名」に代入
FOR %%I IN ("%アーティスト名フォルダのパス%") DO set "アーティスト名=%%~nI"

rem ■ ファイルリストを出力
dir /b "%~1" > "%アーティスト名% - %~n1.txt"

―――――――――――――――――――――――
    • good
    • 1
この回答へのお礼

ありがとうございます。
確かにディレクトリをひとつ上に移動できればなあと思ったこともあったのですが、さてどうしたらいいものかわからず、フルパスを切り抜いて使うことの方に頭が行ってしまいました。
考えてみれば"%~dp1"、を使うと良かったのですね。
また、ディレクトリーの移動にPUSHDを使うこともできるのですね。
確かにコンソールで直接入力するときにはこれは戻るときに便利ですが、バッチファイルで使うとは思いませんでした。
こちらでは、CDでもPUSHDでも、今回のお話に限って言えば同じ動作になりましたが、このふたつのおかげでバッチファイルの役割がもっと広げられるかもしれませんね。
勉強になりました。

お礼日時:2018/01/31 18:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!