【例】よく使うバッチファイル

個人的によく使うものをリスト化しています.

ループ

『ループ回数』を変数として使って何か処理をしたい場合.
例えば,奇数番号を含む文字列を生成したい場合など.

REM *****************************************
REM * Template of loop
REM * Repeat until LoopNum
REM *****************************************
@echo off
set Counter=0
set LoopNum=
:loop1
  set /a Counter=%Counter%+1
  REM Write process below
      
if not %Counter% == %LoopNum% goto loop1

変数
  • Counter: ループ回数をカウント
  • LoopNum: ループする回数

年月日時間(YYYYMMDDHHMMSS)の名前フォルダを作成する

Desktopに作成

REM **************************************************************************
REM * Make a directory named YYYYMMDDMMSS on Desktop
REM **************************************************************************
@echo off
   set YYYYMMDD=%DATE:~-10%
   set YYYYMMDD=%YYYYMMDD:/=%
   set HHMMSS=%time:~0,8%
   set HHMMSS=%HHMMSS: =0%
   set HHMMSS=%HHMMSS::=%
   set DIR_NAME=%HOMEDRIVE%%HOMEPATH%\Desktop\%YYYYMMDD%%HHMMSS%
   mkdir %DIR_NAME%

特定フォルダ以下の「全階層」にある全てのファイルを取り出す

上の例と組み合わせれば,年月日時間(YYYYMMDDHHMMSS)の名前フォルダにコピーできる.

REM *****************************************
REM * Recursively copy all pdf files 
REM * to the target directory 
REM *****************************************
@echo off
DIR_NAME=
for /R %%f in (*.pdf) do copy "%%f" %DIR_NAME%\

変数
  • DIR_NAME: コピー先フォルダのpath

ファイル名の一括変更(特定フォルダ内 / ファイルリストを読み込み)

  1. 作業フォルダを,デスクトップに作った年月日時刻のフォルダにコピー
  2. コピーしたフォルダにあるファイルをリネーム
    • 『ABCD_Rab.xlsx』を『 Prefix + ABCD + Suffix + .xlsx』にリネームする
REM *****************************************
REM * Edit file names in the directory
REM * %~nF:File name of %F
REM * %~xF:EXTENSION of %F
REM *****************************************
@echo off
   set Prefix=""
   set Suffix=""
   set DIR=%~dp0
   pushd %DIR%

REM 1. Make Directory
   set YYYYMMDD=%DATE:~-10%
      set YYYYMMDD=%YYYYMMDD:/=%
   set HHMMSS=%time:~0,8%
      set HHMMSS=%HHMMSS: =0%
      set HHMMSS=%HHMMSS::=%
   set NewDir=%DIR%\%YYYYMMDD%%HHMMSS%
   mkdir %NewDir%

REM 2. Rename
   for %%F in (*.xlsx) do call :sub "%%F"
   popd
   goto :EOF

   :sub
      copy "%DIR%%~1" %NewDir%

      set BEFORE=%~1
      set FILENAME=%~n1
      set FILENAME=%FILENAME:~0,-4%
      set EXTENSION=%~x1
      set AFTER=%Prefix%%FILENAME%%Suffix%%EXTENSION%

      pushd %NewDir%
      ren "%BEFORE%" "%AFTER%"
      popd
   goto :EOF

変数
  • DIR: 対象フォルダ.
    • バッチファイルのある場所にしたい場合,DIR=%~dp0とする.
  • Prefix: ファイル名の先頭に付加する文字列
  • Suffix: ファイル名の末尾に付加する文字列

また

for %%F in (*.xlsx) do call :sub "%%F"

の部分を

for /f "tokens=1* delims=: eol=" %%X in ('findstr /n "^" %DIR%filelist.txt') do call :sub "%%Y"

に変更すれば,filelist.txtに書き込まれているファイルを対象に処理を行うことが出来る.