
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も見ています
-
複数フォルダをまとめて移動するバッチ
Windows Vista・XP
-
コマンドプロンプトでフォルダを移動させるには?
Windows 7
-
コマンドプロンプトのエラーについて
その他(パソコン・周辺機器)
-
-
4
大量のフォルダからひとつのフォルダにファイルをまとめたい!
その他(ソフトウェア)
-
5
Windowsコマンドプロンプトのmoveコマンドが何度も構文エラーエラーを吐き出す件。
その他(プログラミング・Web制作)
-
6
ファイル名を該当フォルダ内から検索して移動
その他(プログラミング・Web制作)
-
7
ワイルドカードを使ってでフォルダを削除
Windows 10
-
8
沢山のフォルダにあるファイルを上の階層に出すには?
Windows Me・NT・2000
-
9
moveコマンドで別のドライブにフォルダを移動
その他(OS)
-
10
同名フォルダを作成し、そのフォルダに移動するバッチ
その他(プログラミング・Web制作)
-
11
bat ファイルでフォルダ作成&移動
Windows Vista・XP
-
12
多数のサブディレクトリ内のファイルを一括コピーする
その他(プログラミング・Web制作)
-
13
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
14
フォルダを自動作成・移動を複数ファイルに対して行うバッチ処理について
その他(プログラミング・Web制作)
-
15
コマンドプロンプトによるフォルダ内のファイル存在有無
UNIX・Linux
-
16
【バッチファイル】ホスト名をファイル名につけたい【変更】
その他(コンピューター・テクノロジー)
-
17
Windowsで指定「以外」のファイルを移動したい
IT・エンジニアリング
-
18
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
19
ファイル名の頭5桁と同名のフォルダを自動作成し、移動させる方法はありますか?
Access(アクセス)
-
20
バッチファイルでファイル移動とログ出力
システム
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Visual C++2008でソースコード...
-
ファイルアップローダ+複数の...
-
PHP+PostgreSQLで画像処理につ...
-
このアクセス解析の設置ができ...
-
FTPコマンドでディレクトリごと...
-
DLL のロードの順序
-
サブディレクトリ内の参照
-
wordpressの記事をカスタマイズ...
-
ターミナル上のコマンド操作
-
アプリケーション・ディレクト...
-
Linuxサーバーでの引数に拡張子...
-
ディレクトリ見たいのですが・・・
-
ディレクトリ名取得
-
glob関数で日本語文字が取得で...
-
JAVA内で複数のファイルを削除...
-
FTPでのファイルとディレクトリ...
-
PHPにて所有者名を変更出来...
-
ディレクトリの書込権限について
-
パスの設定
-
GETで値を渡す時に”?”をなくす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
Subversionのリポジトリの削除
-
バッチを用いたフォルダの自動移動
-
makefile でファイルをコピーす...
-
CFileDialogの最初のディレクト...
-
FTPでのファイルとディレクトリ...
-
visualstudioでc#のdllができない
-
VB.NET 最下位のディレクトリ名...
-
MkDir関数
-
現在位置より2つ上のディレク...
-
DLL のロードの順序
-
rmdirでフォルダが消せません
-
Subversionで、ファイルをリネ...
-
絶対パス?絶対アドレス?意味...
-
define でのルートディレクト...
-
Visual C++ 2005 Express Editi...
-
ツリーメニューを縮小させたい
-
JAVA内で複数のファイルを削除...
-
fopenでファイルが開かない場合...
-
Smarty includeでテンプレート...
おすすめ情報