質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

1回答

2519閲覧

コマンドプロンプトで親フォルダから子フォルダ1~nの名前をそれぞれの孫ファイル11~nnの名前の拡張子の前に自動的に付属させるプログラム

hamadra123

総合スコア1

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2021/11/13 07:54

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
コマンドプロンプトで親フォルダから子フォルダ1nの名前をそれぞれの孫ファイル11nnの名前の拡張子の前に自動的に付属させるプログラムを作っています。

親フォルダ>子フォルダ1>孫ファイル11.txt
孫ファイル12.txt
孫ファイル13.txt
>子フォルダ2>孫ファイル21.txt
>孫ファイル22.txt
>子フォルダ3>孫ファイル31.txt
>孫ファイル32.txt
>孫ファイル33.txt
>孫ファイル34.txt
⇒.bat実行
⇒親フォルダ>子フォルダ1>孫ファイル11-親フォルダ名-子フォルダ1名.txt
孫ファイル12-親フォルダ名-子フォルダ1名.txt
孫ファイル13-親フォルダ名-子フォルダ1名.txt
>子フォルダ2>孫ファイル21-親フォルダ名-子フォルダ2名.txt
>孫ファイル22-親フォルダ名-子フォルダ2名.txt
>子フォルダ3>孫ファイル31-親フォルダ名-子フォルダ3名.txt
>孫ファイル32-親フォルダ名-子フォルダ3名.txt
>孫ファイル33-親フォルダ名-子フォルダ3名.txt
>孫ファイル34-親フォルダ名-子フォルダ3名.txt

発生している問題・エラーメッセージ

色々似たようなことを行っているサイトを見て真似をしましたが しっくりこないです。プログラミング自体初心者なため「Windowsコマンドプロンプトポケットリファレンス」を 買ってみたのですが、部品集のような内容でどの部品をどう組み合わせればよいかを教えていただけたら 自分でできるかと思いますのでご指摘をお願いします。 フリーソフトを提案されている方もいらっしゃいましたがフリーソフトを入れたくないので質問しました。 勝手ながらお知恵を貸していただければ幸いです。

該当のソースコード

cmd.exe

1echo off 2pushd C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ1\ 3 4(「この部分でfor文で孫ファイル1xのx=1,2,3に対してリネームで親フォルダから子フォルダ1までの名前を 5孫ファイル11~13の.txtという拡張子前に-を区切りにして孫ファイル名-親フォルダ名-子フォルダ名.txt」という操作をしたいです。) 6 7 8 9echo off 10pushd C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ2\ 11 12(「この部分でfor文で孫ファイル2xのx=1,2に対してリネームで親フォルダから子フォルダ2までの名前を 13孫ファイル21~22の.txtという拡張子前に-を区切りにして孫ファイル名-親フォルダ名-子フォルダ名.txt」という操作をしたいです。) 14 15echo off 16pushd C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ3\ 17 18(「この部分でfor文で孫ファイル3xのx=1,2,3,4に対してリネームで親フォルダから子フォルダ3までの名前を 19孫ファイル31~34の.txtという拡張子前に-を区切りにして孫ファイル名-親フォルダ名-子フォルダ名.txt」という操作をしたいです。)

試したこと

真似をしたコードでは一つ前のフォルダしか名前が付けられず階層で2つ前と指定しているものはありませんでした。
申し訳ありませんがお知恵を貸して下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんな感じでしょうか。

ファイル名フルパスから、親フォルダー以上の部分を削除して、それを\で分割します。
三階層限定ですが、任意階層に対応するのは面倒そうです。

CMD

1@echo off 2setlocal enabledelayedexpansion 3pushd "C:\Users\ユーザー名\Desktop\親フォルダ" 4pushd .. 5set PREFIX=%CD% 6popd 7 8for /r %%A in (*.txt) do call :SUB "%%~dpnxA" 9exit /b 10 11:SUB 12set A=%~1 13for /f "delims=\ tokens=1-3" %%X in ("!A:%PREFIX%=!") do ( 14 ren "%A%" "%%~nZ-%%X-%%Y.%%~xZ" 15) 16exit /b

投稿2021/11/13 10:59

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2021/11/13 11:06

親フォルダーを C:\Users\ユーザー名\Desktop\親フォルダ から動かすことが無いのであれば、 %PREFIX%の削除は不要で、tokens= の数字を tokens=5-7 に変えればいいです。
hamadra123

2021/11/13 12:50

早速の回答ありがとうございます。 自分のPCで実行してみましたが どうやらデスクトップにあるファイルが "-Desktop--Desktop-ファイル名.*"となりました。 PATHを指定してバッチファイルを起動させたら実行してくれると思ってましたが 適用の仕方はあっていますでしょうか? @echo off setlocal enabledelayedexpansion           rem:遅延環境変数 pushd "C:\Users\ユーザー名\Desktop\親フォルダ" rem:親フォルダのディレクトリに移る pushd ..                       rem:一つ上の階層(Desktop)に移る set PREFIX=%CD% rem:"PREFIX"という変数に現在のディレクトリ文字列(C:\Users\ユーザー名\Desktop) popd rem:Desktop階層から⇒C:\Users\ユーザー名に戻る for /r %%A in (*.txt) do call :SUB "%%~dpnxA"    rem:"A"という変数名のフォルダから開始してすべてのサブフォルダの.txtファイルに"ドライブ名\パス名\ファイル名\"をサブルーチン内で渡す(よくわかりませんでした) exit /b rem:このバッチを終了する :SUB set A=%~1 rem:.txtまでダブルクォートで囲む for /f "delims=\ tokens=1-3" %%X in ("!A:%PREFIX%=!") do ( ren "%A%" "%%~nZ-%%X-%%Y.%%~xZ" ) rem:for以降のここもよくわかりませんでした exit /b
otn

2021/11/13 13:07

> pushd "C:\Users\ユーザー名\Desktop\親フォルダ" のフォルダー名が間違っていて、pushd が失敗しているのでは?
hamadra123

2021/11/13 13:32 編集

なぜか実行できませんが、よくわかりません。 ですが、otnさんの回答が正しいことはなんとなくで申し訳ないですが わかりましたのでベストアンサーとさせてください。ちなみに実行している階層は C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ1\孫ファイル1 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ1\孫ファイル2 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ1\孫ファイル3 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ1\孫ファイル4 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ1\孫ファイル5 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ1\孫ファイル6 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ2\孫ファイル1 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ2\孫ファイル2 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ2\孫ファイル3 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ2\孫ファイル4 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ2\孫ファイル5 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ2\孫ファイル6 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ3\孫ファイル1 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ3\孫ファイル2 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ3\孫ファイル3 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ3\孫ファイル4 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ3\孫ファイル5 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ3\孫ファイル6 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ4\孫ファイル1 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ4\孫ファイル2 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ4\孫ファイル3 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ4\孫ファイル4 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ4\孫ファイル5 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ4\孫ファイル6 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ5\孫ファイル1 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ5\孫ファイル2 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ5\孫ファイル3 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ5\孫ファイル4 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ5\孫ファイル5 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ5\孫ファイル6 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ6\孫ファイル1 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ6\孫ファイル2 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ6\孫ファイル3 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ6\孫ファイル4 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ6\孫ファイル5 C:\Users\ユーザー名\Desktop\親フォルダ\子フォルダ6\孫ファイル6 みたいな感じです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問