プロが教える店舗&オフィスのセキュリティ対策術

windows10ユーザです。
フォルダ内にある複数のファイル(jpg)を、ファイル名の頭5桁ごとに分類したいため、そのファイル名と同名のフォルダを元のフォルダ内に新たに作成し、そこに保存したいと思っていますが、何か一括でファイル名と同名のフォルダを作成する方法はないでしょうか?

例)
ファイル名:
・12345_a.jpg
・12345_b02.jpg
・12345-a.jpg
・12346-011_hh.jpg
・12346-a.jpg

分類後:
-フォルダ「12345」
・12345_a.jpg
・12345_b02.jpg
・12345-a.jpg

-フォルダ「12346」
・12346-011_hh.jpg
・12346-a.jpg

*最初の5桁の番号で分類したいです。
*_か-の後の文字数は変動あります

検索したところフリーソフトや、バッチ、マクロの例などあったのですが、
一つずつのファイル名で分類してしまうもの等、ちょうど条件に合うものがみつけられませんでした。
何か良い方法ありましたらお願いいたします。

A 回答 (2件)

バッチファイルの例だと、以下のような感じで出来るかと思います。



以下の線内の文章をメモ帳等に貼り付け、「設定」の下の2行だけご自身の環境や用途に合わせて書き換え、保存時に「文字コード」を「ANSI」にして、「~.bat」というようなファイル名(バッチファイル)で保存し、それを実行してみてください。

まずは、コピーしたファイルを対象にテストしてみてください。

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

@echo off

rem ■ 設定
set "対象フォルダ=C:\xxx\xxx"
set "対象ファイル=*.jpg"

rem ■ カレントディレクトリの変更
pushd "%対象フォルダ%"

rem ■ 遅延環境変数を有効にする
SETLOCAL enabledelayedexpansion

rem ■ ループ処理開始
for %%a in ("%対象ファイル%") do (

rem ■ 「ファイル名」の代入
set "ファイル名=%%~na"

rem ■ 「頭の文字列」の代入(ファイル名の頭から5文字目まで)
set "頭の文字列=!ファイル名:~0,5!"

rem ■ 頭の文字列のフォルダを作成
md "!頭の文字列!" >nul 2>&1

rem ■ 頭の文字列が付くファイルを、頭の文字列のフォルダへ移動
move "!頭の文字列!*" "!頭の文字列!\" >nul 2>&1

rem ■ ループ処理終了
)

rem ■ 遅延環境変数を無効にする
ENDLOCAL

rem ■ 完了
echo. 
echo. 完了しました。
echo. 

pause

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

※「>nul 2>&1」はエラーを非表示にする為の記述です。

うまくいかなかったら、その旨を補足して頂ければ修正します。
    • good
    • 1
この回答へのお礼

ありがとうございます!無事にイメージ通りのフォルダ分けができました!!
手動で度々行っている作業でしたので、今後も活用させていただきます。
丁寧に教えていただきありがとうございました。

お礼日時:2020/11/12 13:16

そういうのはUnix、Linuxのコマンド類が得意ですが、


bashだとこんな感じです。

for dir in `ls | cut -c 1-5 | sort | uniq`; do mkdir $dir; done

cygwinでもWSLでもいいけれど
Windows10にUnixライク、Linuxライクな環境を導入すれば、
上記コマンドでできると思います。
    • good
    • 1
この回答へのお礼

こんな短いコードで実現するのですね...!すごいです。
申し訳ありませんが、環境構築がまだ出来ておらず、
こちらのコードをどう使ってよいのか私の技量だとわからず、実行できませんでした。
今後環境できたら試してみたいと思います。ありがとうございます!

お礼日時:2020/11/12 13:15

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