これを こうしたい。 \dir → \dir |- 20170801.csv |- \201708 |- 20170802.csv | |- 20170801.csv |- 20170803.csv | |- 20170802.csv |- 20171010.csv | `- 20170803.csv |- 20171025.csv |- \201710 `- 20171225.csv | |- 20171010.csv | `- 20171025.csv `- \201712 `- 20171225.csv
@@echo off rem 実行フォルダ内にあるCSVを、ファイル名の先頭6文字のフォルダごとに分類 for %%A in (*.csv) do call :Main %%A %%~nxA goto End :Main set bname=%2 set dirname=%bname:~0,6% if not exist %dirname% mkdir %dirname% move %1 %dirname% goto :eof :End pause
バッチファイルではfor文内でのsetが上手くいかないので、関数のように外部化している。
空のフォルダは除く
xcopy /t コピー元パス コピー先パス
空のフォルダもコピー
xcopy /t /e コピー元パス コピー先パス
ディレクトリを削除する際、エクスプローラから、右クリック→削除 や Deleteキー などで削除すると、まずファイルのリストアップが始まり、これに結構時間がかかる。
[Shift]+[Del]を使うとゴミ箱に移されないで直接削除されるが、リストアップが入るのは変わらない。
コマンドの del
を使うと、ユーザーインターフェイスは無くなるが、リストアップが走らなくなるので、高速に削除できる。
問答無用で削除が走るため、安全のため確認を付けたバッチファイル。ここに削除したいフォルダをD&D。
@echo off echo %1 を削除します。元に戻すことはできません。間違えた場合は[×]で終了してください echo pause echo %1 を削除します。最終確認です。 echo pause del /f/s/q %1 > nul rmdir /s/q %1 echo 削除完了 pause