
バッチが使いたい初心者です。(windows 7)
大量の画像のフォルダをまとめるためにバッチを使いたいです。
助けて頂けないでしょうか。。。
(batの中身)
@echo off
pushd %~dp0
for /f %%i in (namelist.txt) do mkdir %%i
for /f %%j in (namelist.txt) do copy "*%%j*" %%j
exit
(namelistの中身)
あ\A
あ\B
い\C
い\D
い\E
う\F
続く・・・
↑この内容でバッチをまわすと、「あ」の中に「A」まではうまくフォルダができますが
「A」の中身は空っぽになってしまいます。
namelistの中身を以下の内容にすれば中身はきちんとコピーされます。
A
B
C
D
続く・・・
でも、できればフォルダを2段階にしたいのです。どこを直したらいいのでしょうか?
教えていただけると非常に助かります。よろしくお願いいたします。

No.2ベストアンサー
- 回答日時:
以下のような感じでいかがでしょうか。
ざっと書いただけなので、スマートではない部分や、不具合、対応出来ないケースもあるかも知れませんが、その場合は、その旨を補足されるか、そちらで修正してみてください。こちらで動作確認はしています。
対象フォルダは、バッチファイルがあるフォルダです。
―――――――――――――――――
@echo off
pushd "%~dp0"
for /f "usebackq delims=" %%i in (`type "namelist.txt"`) do mkdir "%%i"
for /f "usebackq tokens=1-2 delims=\" %%j in (`type "namelist.txt"`) do copy "%%k*" "%%j\%%k\"
pause
exit
―――――――――――――――――
簡単な解説は以下の通りです。詳細はWEB検索なさってください。
―――――――――――――――――
【 usebackq 】
in部分の「`」で囲まれた部分のコマンド実行結果を、対象ファイル(対象データ)とする。
【 delims= 】
取り出した1行内の、「トークン」(区切られた文字列、単語)の「区切りとなる文字」を指定する。「delims=」の後に何も書かなければ「区切り無し」の意味となる。つまり、1行まるごと「%%アルファベット」に入る。この指定(delims=)自体をしない場合は「タブとスペース区切り」となる。「delims=」の記述場所は、「"xxx xxx delims="」のように、最後に書く。(半角スペースを指定する場合もある為。)
【 tokens= 】
何番目のトークンを取り出すか指定する。
「1-3」は「1~3」の意。
「1,3」は「1と3」の意。
「1-3,5」は「1~3と5」の意。
2つ目以降のトークンは、開始アルファベットの次のアルファベットに格納される。
「%%a」開始なら、2つ目は「%%b」に入る。
【 type 】
テキストファイルの内容を表示するコマンド。
【 "%%k*" 】
今回の場合は、「(2番目のトークン)~」を表す。「a*」のような感じ。
【 "%%j\%%k\" 】
今回の場合は、「(1番目のトークン)\(2番目のトークン)\」を表す。「あ\A\」のような感じ。今回のようにコピー先に指定する場合は、最後が「\」で終わっているので、「このフォルダ内にコピーする」という意味になる。ファイル名はコピー元と同じ。逆に、コピー先が「あ\A」のように「\」で終わらない場合は、「ファイル指定」とみなされる。しかし、「同名のフォルダ」が存在する場合は、そのファイルは作成出来ず、エラーとなる。
【 pause 】
一時停止コマンド。
―――――――――――――――――
1つ目のfor文では、取り出した1行をまるごと利用し、フォルダ作成に使っています。
2つ目のfor文では、取り出した1行を、「\」で区切り、先頭から2つトークンを取り出し、2つ目のトークンを「コピー元ファイルの指定」に使い、1つ目と2つ目のトークンを「コピー先フォルダの指定」に使っています。
又、わざわざ「pushd "%~dp0"」や「in (`type "namelist.txt"`)」のように、「"」で囲む書き方にしているのは、ファイル名やパスの記述において、より多くの文字(全角/半角スペース、「&」、「( )」等)に対応する為です。必須ではありません。エラー防止の念の為です。
「in (`type "namelist.txt"`)」は、「in ("namelist.txt")」と記述しても大丈夫なようですが、正式な書式かは分からないです。その場合も「usebackq」は付ける必要があるようです。
又、不具合箇所を探す場合、「do」の後に「echo」入れて、「do echo mkdir "%%i"」のような感じにすると、アルファベットに代入された変数の値が確認出来、分かりやすいかと思います。
できました。。。こんなに詳しく書いてもらって涙が出るほどうれしいです。
1つずつ調べながら理解していきたいと思います。バッジってすごいですね。VBAのコードに比べて
こんなに短い分でこんな事ができるなんて。勉強していきたいと思います。
本当にありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- その他(開発・運用・管理) フォルダの中にファルダを作成してファイルを格納するバッチコマンド 1 2022/06/30 11:39
- Visual Basic(VBA) batにて、異なるフォルダの同名ファイルを参照し、文字列を判別。擬似配列で変数へ格納 3 2022/04/10 03:37
- その他(プログラミング・Web制作) フォルダを一括で作成する方法 0 2022/07/27 19:19
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- その他(クラウドサービス・オンラインストレージ) このような条件でデータを置いておけるサービス 3 2022/07/25 08:31
- その他(プログラミング・Web制作) Sikulix2.0.5(Jython2.7.3)でcsvを読込WEB検索条件にpasteで文字化け 1 2023/03/31 11:02
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- Excel(エクセル) ファイル一覧表を使ったファイルの移動 5 2022/08/10 15:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
ExcelVBAのDirでスペース含むフ...
-
サブフォルダからファイルをコ...
-
.batでファイル名から抽出して...
-
access,vbaでフォルダ内のファ...
-
コマンドプロンプトで変数が数...
-
ファイル名の頭5桁と同名のフォ...
-
DOSのバッチ作成について‐FORの...
-
バッチファイルの繰り返し処理...
-
バッチ処理で16進数でファイル...
-
コマンドプロンプトでファイル...
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトのエラーに...
-
隠しファイルの扱い
-
アクセス 壊れた? 「ファイ...
-
binファイルを解凍したいの...
-
バッチでテキストファイルから...
-
これってパソコンの最適化が完...
-
Thunderbirdで社内共有フォルダ...
-
[teraterm] waitコマンドで停止...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
バッチファイルで、iniファイル...
-
コマンドプロンプトでファイル...
-
ftp処理でmove(移動)を行いたい
-
コマンドプロンプトで変数が数...
-
ExcelVBAのDirでスペース含むフ...
-
[DOS] コピー先に同じファイル...
-
ファイル名の頭5桁と同名のフォ...
-
サブフォルダからファイルをコ...
-
フォルダ内の更新日時が一番新...
-
.batでファイル名から抽出して...
-
バッチファイルで同一フォルダ...
-
access,vbaでフォルダ内のファ...
-
バッチコマンドでファイル名の...
-
Windowsコマンドプロンプトで、...
-
スタートアップのファイルをバ...
-
ファイル名に ” を使うと エク...
-
ファイル名を該当フォルダ内か...
-
aタグのhrefにネットワークパス...
-
【DOSバッチ開発】末尾のタブの...
おすすめ情報