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

はじめて質問させていただきます。
質問内容は会社でファイル分け作業をbatファイルで、できないかという事です。

ファイル名(全て半角英数字)
AAAA23.doc
BBB834.doc
CCCA87.doc
AAA567.doc

最初の3文字だけファイル名を抽出し、抽出した3文字のフォルダを作成。
抽出したフォルダにコピーする。
ファイル名は長くなる事はあっても、抽出する文字数は一定です。
会社で使う為にフリープログラムなど使えない状態です。

別の質問にあった下記のバッチが近いのですが、最初の3文字抽出ができずに困っております。
:LOOP
if "%~1"=="" goto :EOF
md "%~n1"
move "%~1" "%~n1"
shift
goto :LOOP

解りずらい説明、最後まで読んでいただきありがとうございました。

A 回答 (1件)

以下のような感じでいかがでしょうか。



「設定」の所にある、振り分け対象ファイルが入ったフォルダである「C:\振り分け対象フォルダ」の部分は、環境に合わせて書き換えて使ってください。

対象ファイルは、対象フォルダ内のファイルのみです。

サブフォルダ下のファイルは含みません。

「%」を含むファイル名やパスには対応していません。

安全の為に、テスト用にコピーしたファイルを対象にまず実行してください。

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

@echo off

rem ■ 設定 ■
set "対象フォルダ=C:\振り分け対象フォルダ"

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

rem ■ 振り分け処理の開始 ■
for /F "delims=" %%a in ('dir /b /a-d') do (
call :振り分け処理 "%%a"
)

rem ■ 全て終わったら完了メッセージを表示する ■
echo.  
echo.  
echo.  完了しました。
echo.  
echo.  
pause

rem ■ このバッチファイルを終了させる ■
exit /b

rem ■ 振り分け処理 ■
:振り分け処理

rem ■ 変数「ファイル名」に、今回のファイル名を代入する ■
set "ファイル名=%~1"

rem ■ 変数「フォルダ名」に、「今回のファイル名の頭から3文字」を代入する ■
set "フォルダ名=%ファイル名:~0,3%"

rem ■ 変数「フォルダ名」を使ってフォルダを作成する(まだ無い場合) ■
if not exist "%フォルダ名%" md "%フォルダ名%"

rem ■ 今回のファイルを移動させる ■
move "%ファイル名%" "%ファイル名:~0,3%\"

rem ■ 今回のファイル処理を終了する ■
exit /b 2

―――――――――――――――――――――――――――
    • good
    • 3
この回答へのお礼

こんなに短時間に詳しい説明付き、誠にありがとうございます。
凄くわかりやすく、テストも無事にできました。
こんなに一瞬で振り分けれる事に感動してます。

本当にありがとうございました。

お礼日時:2017/07/04 22:28

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A