POINT
- よく使うバッチファイルのテンプレート(変数を変更すればそのまま使える).
- ループ処理, 日付名フォルダの作成, 特定の拡張子のファイル抽出, ファイル名の一括変更.
「ループ処理」や「日付名フォルダの作成」,「特定の拡張子のファイルを取り出す」,「ファイル名の一括変更」など,よく使うバッチファイルのテンプレートを紹介します.環境にあわせて,変数を変更して使って下さい.
- ループ処理
- 年月日時間(YYYYMMDDHHMMSS)の名前フォルダを作成する
- 特定フォルダ以下の「全階層」にある,全てのpdfファイルを取り出す
- ファイル名の一括変更(特定フォルダ内 / ファイルリストを読み込み)
- Power Shellを実行するバッチファイル
- 参考記事
ループ処理
『ループ回数』を変数として使って何か処理をしたい場合.例えば,奇数番号を含む文字列を生成したい場合など.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%
特定フォルダ以下の「全階層」にある,全てのpdfファイルを取り出す
- 「全階層」というのは,『「フォルダ内のフォルダ」+「フォルダ内のフォルダ内のフォルダ」+ ・・・』全てを対象にするという意味です.
- もちろん,".txt"や".xlsx"でもOK.
- 上の例と組み合わせれば,「pdfだけを,年月日時間(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.「特定フォルダ内の,全ての".xlsx"ファイル」を対象にする場合
- 作業フォルダを,デスクトップに作った年月日時刻のフォルダにコピー
- コピーしたフォルダにあるファイルをリネーム
- 『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: ファイル名の末尾に付加する文字列
2.「filelist.txtに書き込まれているファイルだけ」を対象に処理を行う場合
1.「特定フォルダ内の,全ての".xlsx"ファイル」を対象にする場合において,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に書き込まれているファイルだけ」を対象に処理を行うことが出来る.