コマンドプロンプトを使ってファイル名を文字列加工して別フォルダへコピーしたい[バッチ,Bat]

2020年12月1日

妹「お兄ちゃん、大量のエクセルファイルがあるんだけど、別のフォルダへまとめてコピーしたいの」
兄「そういう時はコピーコマンドを使えばできるよ」
妹「できればファイル名をいつコピーしたか解るように、日付を入れたいんだよね」
兄「……ん?」
妹「A.xls , B.xls を 『 ..\A(今日日付).xls ..\ B(今日日付).xls 』 って形で」
兄「……できるよ」
妹「なんで嫌そうなの……?」
兄「だってForFilesの説明とか、echoとか文字列加工とかで記事数増やせそうなのに」
妹「それも後で増やしてリンクでもすればいいんじゃないかな?更新日付とか誰も気にしないし」
兄「そうかな……?」
妹「そうそう。アニメやラノベの手法でいきなり終盤からスタートして、回想から最初に戻るみたいなあんな感じ」
兄「それは夢オチの次くらいにやっちゃダメな奴だと思うけど……まぁいいか」

@echo off
cd /d %~dp0
SET szd=(%DATE:~0,4%.%DATE:~5,2%.%DATE:~8,2%)
forfiles /M *.xlsx /c "cmd /c copy @path ..\@fname%szd%.xlsx

兄「これでできるよ」
妹「見たことないコマンドでいっぱいだね!簡単に説明よろしくね」
兄「 1行目でコマンドの表示をオフ
2行目で日付を文字列 加工してszd変数にセット
3行目でforfilesを使って*.xlsxの名前を取得し、コマプロからcopyコマンドを使って、見つけたフルパスから加工後の名前を与えて実行
だよ」
妹「……やっぱりステップで進んでいく方がいいね!」