ファイル・フォルダ管理 - バッチファイル

ファイルを先頭N文字のフォルダ毎に分類

これを                 こうしたい。
\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
distribute_left6dir.bat
@@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。

fast_rmdir.bat
@echo off
 
echo %1 を削除します。元に戻すことはできません。間違えた場合は[×]で終了してください
echo
pause
 
echo %1 を削除します。最終確認です。
echo
pause
 
del /f/s/q %1 > nul
rmdir /s/q %1
 
echo 削除完了
pause
programming/batch/distribute_files.txt · 最終更新: 2021/10/01 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0