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

2019年8月5日

妹「お兄ちゃん、大量のエクセルファイルがあるんだけど、別のフォルダへまとめてコピーしたいの」
兄「そういう時はコピーコマンドを使えばできるよ」
妹「できればファイル名をいつコピーしたか解るように、日付を入れたいんだよね」
兄「……ん?」
妹「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コマンドを使って、見つけたフルパスから加工後の名前を与えて実行
だよ」
妹「……やっぱりステップで進んでいく方がいいね!」