Windows上のファイル(フォルダ)操作について教えてください。
ある一定の文字列(AAA,BBB等)をもったサブフォルダがtempフォルダに無造作にあるので、
以下のようにフォルダを整理(移動)したいと考えております。
D:
temp
└ AAA_01,AAA_02,BBB 01,BBB 02,CCCxxx,CCCvvv,…
AAA
BBB
CCC
↓
D:
temp
AAA
└AAA_01,AAA_02,…
BBB
└BBB 01,BBB 02,…
CCC
└CCCxxx,CCCvvv,…
手作業では大変だったのでバッチ(forコマンド)で一括処理できないかと、
整理したいフォルダ群があるtempフォルダ(D: \temp)で以下を実行してみました。
for /f %i in (list.txt) do move "%i"* "D:\%i\"
※list.txt は D:> dir /b > list.txt で取得
-----
AAA
BBB
CCC
・
・
・
-----
しかし、完全一致のフォルダ(AAA)は移動できましたが、
文字列を含むフォルダ(AAA_01等)は移動できませんでした。
ワイルドカードの指定もうまくいかず、良い方法がありましたら教えてください。
(VBAのMoveFolderメソッドはワイルドカードが使えるようですが、
list.txt を読み込む方法がわかりませんでした。)
どうぞよろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
なんと!
moveがディレクトリのワイルドカードに対応していないのは知りませんでした。
ファイルではなくサブフォルダというのも読み落としていて、失礼しました。
ワイルドカードではなく一意ならばmoveできるようなので、移動したいディレクトリ一覧を使う方法になるかもしれません。
私の書いた内容をもう少し砕きます。
例えば、移動したいディレクトリ名の3文字目までは移動先のディレクトリ等の決めごとがあるならば、移動したいディレクトリから移動先を導き出せるため、moveすることができると思います。
その決めごとでバッチファイルにすれば、「set /?」コマンドに出てくる副文字列を使用できます。
forのループ変数を適当な環境変数に格納し、その環境変数からディレクトリ名の副文字列を得ればmoveコマンドに使用できると思います。
(副文字列の記法からバッチファイル内でしか使えなそうです。)
>dir /b
a.bat
aaa_01
bbb 03
ccc02
>type a.bat
@echo off
setlocal enabledelayedexpansion
for /f %%i in ('dir /b') do (
echo %%i
set org=%%i
set dir=!org:~0,3!
echo %dir%
echo move %%i ..\!dir!
)
>a.bat
a.bat
.ba
move a.bat ..\a.b
aaa_01
aa_
move aaa_01 ..\aaa
bbb
bb
move bbb ..\bbb
ccc02
cc0
move ccc02 ..\ccc
>
質問内容では決めごとが一律ではないため、一律にするか、AAAの場合・BBBBの場合等で場合分けした後にそれぞれの決めごとでディレクトリを導き出すとよいと思います。
ただ、私の書いた『「_」の前まで』の決めごとからディレクトリを導き出すことはバッチファイルではできないかもしれません。
「BBB 01」の場合はコマンドが2引き数と解釈してしまうため、一旦「 」を「_」にする等の対策がいると思います。
他の方法としては、ググったところUNIXの同様機能のmvはワイルドカードが使えるので、MinGWをインストールする手もあります。
念のためですが、質問内容の処理は移動先ディレクトリ名が移動したいディレクトリ名と同じになっているため、完全一致ではないディレクトリは移動先ディレクトリが用意されていないために移動されなかったと思います。
詳しいご説明、ありがとうございました。
moveコマンドではディレクトリに対してワイルドカードが使えず、
移動したいディレクトリ名から移動先を導き出すには制約がある(頭~文字からとか、空白の考慮とか)
…とても勉強になります。
なので他の方法としてご提案いただいた、mvコマンドをWindows上で使う方法を試してみました。
結果、無事にmvコマンドで想定の動作が実現できました。
ご教示いただきまして、誠にありがとうございました。
No.1
- 回答日時:
移動先のディレクトリは人が作る等、どこまで人が行うかわからないけど。
moveはディレクトリの作成は行わないため、人が移動先のディレクトリを作っておくと仮定します。
別のアプローチの仕方もあるかもしれません。
dirコマンドで「d:\」ディレクトリ下の移動先ディレクトリ一覧を作成し、そのエントリにワイルドカードを付けたものを移動対象のファイルとして移動するというものです。
例えば、一覧に「AAA」があれば、ファイルのある場所で、「move AAA* ..\AAA」となる。
質問のように移動ファイル一覧を使う方法の場合は、ファイル名のどこまでがディレクトリを意味するのかをそれぞれ決める必要があると思います。
(「AAA_01」は3文字目まで?、「_」の前まで?、「BBB 01」は「 」の前まで?等一律ではないため。)
文字数で決まる場合は、副文字列(「set /?」コマンド参照)を使ってファイル名からディレクトリ名を特定してmoveすればよいと思います。
ご返信ありがとうございます。
おっしゃるとおり、移動先ディレクトリは既に作ってある状況です。
(AAA_01,AAA_02 … 用に AAA 等)
> dirコマンドで「d:\」ディレクトリ下の移動先ディレクトリ一覧を作成し、そのエントリにワイルドカードを付けたものを移動対象のファイルとして移動するというものです。
> 例えば、一覧に「AAA」があれば、ファイルのある場所で、「move AAA* ..\AAA」となる。
私も同じように考えましたが、「move AAA* ..\AAA」のようなワイルドカードの使用は有効ではないようです。
手入力で検証してみました。
(ワイルドカードを使ったフォルダの移動はできない?)
===
D:\test\temp>dir
2019/05/29 09:41 <DIR> .
2019/05/29 09:41 <DIR> ..
2019/05/27 16:04 <DIR> AAA_01
2019/05/27 15:17 <DIR> BBB 02
D:\test\temp>move AAA* D:\test\folder\AAA\
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
D:\test\temp>move AAA_01 D:\test\folder\AAA\ ※
1 個のディレクトリを移動しました。
===
> 質問のように移動ファイル一覧を使う方法の場合は、ファイル名のどこまでがディレクトリを意味するのかをそれぞれ決める必要があると思います。
> (「AAA_01」は3文字目まで?、「_」の前まで?、「BBB 01」は「 」の前まで?等一律ではないため。)
> 文字数で決まる場合は、副文字列(「set /?」コマンド参照)を使ってファイル名からディレクトリ名を特定してmoveすればよいと思います。
もうしわけありません。上記は意図が読み取れませんでした。
D:\test\temp>move AAA_01 D:\test\folder\AAA\ ※ のように移動元フォルダ名(AAA_01)をすべて指定せよということでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- Excel(エクセル) Excel VBA 3 2023/04/22 10:46
- Excel(エクセル) ファイル一覧表を使ったファイルの移動 5 2022/08/10 15:37
- JavaScript 指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードを教えてください 2 2023/04/27 17:58
- JavaScript JavaScript|特定URLだった時、特定の要素を変更するコードの書き方を教えてほしいです 2 2023/08/25 21:43
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
3分あったら何をしますか?
カップ麺にお湯を入れて、できるまでの3分間で皆さんは何をしていますか?
-
これが怖いの自分だけ?というものありますか?
人によって怖いもの(恐怖症)ありませんか? 怖いものには、怖くなったきっかけやエピソードがあって聞いてみるとそんな感覚もあるのかと新しい発見があって面白いです。
-
集合写真、どこに映る?
あなたが集合写真を撮られるとき、画角のどのあたりにいることが多いですか? 私は振り返ってみると右の端にいることが多い気がします。
-
【選手権お題その2】この漫画の2コマ目を考えてください
サッカーのワンシーンを切り取った1コマ目。果たして2コマ目にはどんな展開になるのか教えてください。
-
複数フォルダをまとめて移動するバッチ
Windows Vista・XP
-
コマンドプロンプトでフォルダを移動させるには?
Windows 7
-
moveコマンドで別のドライブにフォルダを移動
その他(OS)
-
-
4
ワイルドカードを使ってでフォルダを削除
Windows 10
-
5
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
6
コマンドプロンプトのエラーについて
その他(パソコン・周辺機器)
-
7
Windowsコマンドプロンプトのmoveコマンドが何度も構文エラーエラーを吐き出す件。
その他(プログラミング・Web制作)
-
8
沢山のフォルダにあるファイルを上の階層に出すには?
Windows Me・NT・2000
-
9
大量のフォルダからひとつのフォルダにファイルをまとめたい!
その他(ソフトウェア)
-
10
バッチファイル 文字列にスペースがある場合
その他(プログラミング・Web制作)
-
11
異なるファイルに入った複数のファイルを一括で特定のフォルダに移動する方法について
その他(コンピューター・テクノロジー)
-
12
[DOS] コピー先に同じファイル名がある場合、名前を変えて...
その他(プログラミング・Web制作)
-
13
Batch: フォルダ内の特定のファイル以外を全て削除
その他(プログラミング・Web制作)
-
14
フォルダは残してファイルだけ消したい
Windows Me・NT・2000
-
15
Windowsで指定「以外」のファイルを移動したい
IT・エンジニアリング
-
16
多数のサブディレクトリ内のファイルを一括コピーする
その他(プログラミング・Web制作)
-
17
ファイル名を該当フォルダ内から検索して移動
その他(プログラミング・Web制作)
-
18
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
19
フォルダの中身を全部消したい。
Windows Me・NT・2000
-
20
XCOPYで指定したフォルダとファイルをコピーしたい
システム
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CFileDialogの最初のディレクト...
-
バッチを用いたフォルダの自動移動
-
FTPコマンドでディレクトリごと...
-
aspのページが表示できません
-
MkDir関数
-
fopenでファイルが開かない場合...
-
glob関数で日本語文字が取得で...
-
Subversionのリポジトリの削除
-
ファイルアップロードに関して...
-
絶対パス?絶対アドレス?意味...
-
EXEを起動するとDLLが見つから...
-
powershell で書いたプログラム...
-
renameでのPermission deniedエ...
-
ディストリビューションウィザ...
-
サーバー上のファイルコピー
-
VB2008でFTPでのディ...
-
HOSTSファイルについて
-
Visual C++でのfelicaプログラム
-
C言語でのディレクトリ作成につ...
-
xamppでPHPを実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
Subversionのリポジトリの削除
-
CFileDialogの最初のディレクト...
-
バッチを用いたフォルダの自動移動
-
makefile でファイルをコピーす...
-
renameでのPermission deniedエ...
-
現在位置より2つ上のディレク...
-
MkDir関数
-
Makefile.inとMakefile.am
-
DLL のロードの順序
-
visualstudioでc#のdllができない
-
powershell で書いたプログラム...
-
rmdirでフォルダが消せません
-
fopenでファイルが開かない場合...
-
FTPでのファイルとディレクトリ...
-
絶対パス?絶対アドレス?意味...
-
glob関数で日本語文字が取得で...
-
コマンドプロンプトを指定のデ...
-
[ ディレクトリ '.' は書き込み...
-
aspのページが表示できません
おすすめ情報