ファイルの振り分けバッチ その2
ちょとした暇があればバッチ組んでるくらいWindowsバッチにはまってます
前回はフォルダ数も4つ、それぞれ固定でそこにファイルを振り分けるみたいなバッチをかきました
今回はもっと詳細な奴にしてみました
概要は以下です。
・予め作成してあるバッチファイルに、単一または複数のファイル(なんでも)をD&Dしてやると、別に用意してある設定ファイルに従い、キーワードに合致する名称を持つファイルを指定したフォルダへ移動させるというものです。
まぁ大したことはやってないです
ただ多言語はかなりやってるのにバッチやってなかったせいかえらくハマってしまいました^^;
以下バッチファイル2つと設定ファイル一つの中身について概要を記載します
・filing_detail_start.bat
---ここから-----
@echo off
:: バッチファイル自身を最小化して実行
@if not "%~0"=="%~dp0.\%~nx0" (
start /min cmd /c,"%~dp0.\%~nx0" %*
goto :eof
)
for %%a in (%*) do (call "D:\AutoFilingDetail\filing_detail.bat" %%a)
EXIT
---ここまで-----
・前回のブログでは起動時にウィンドウを最小化する方法としてSTART /MINで別のバッチから呼ぶという方法をとっていました。今回はネットの海から有能な方のソースコードを読んで使わせてもらってます。こういうのが効率的だよね^^
・そしてfor文のところで具体的にファイルを振り分けるバッチを呼び出しています。場所や名称は自環境に合わせてください。
・filing_detail.bat
---ここから-----
@echo off
:: 読込テキスト
set list_filing=D:\AutoFilingDetail\filing.txt
:: 振り分けるファイルの名称を取得
set FILE_NAME=%~n1
:: 特殊文字列の置換
set FILE_NAME=%FILE_NAME:(=[%
set FILE_NAME=%FILE_NAME:)=]%
set FILE_NAME=%FILE_NAME: = %
:: フォルダへの振り分け
for /f "skip=1 tokens=1,2* delims=," %%i in (%list_filing%) do (
set FILE_NAME_TMP=%FILE_NAME%
set OUTPUT_FOLDER=%%i
set KEYWORD=%%j
setlocal enabledelayedexpansion
rem echo !FILE_NAME_TMP!
rem echo !OUTPUT_FOLDER!
rem echo !KEYWORD!
:: 全角スペースの置換
set KEYWORD=!KEYWORD: = !
echo !FILE_NAME_TMP! | findstr /I /L /C:"!KEYWORD!"
endlocal
if not errorlevel 1 (goto NEXT)
)
goto LAST
:NEXT
if not exist "%OUTPUT_FOLDER%" (
echo "出力先パスに誤りがあります"
echo Not found: %OUTPUT_FOLDER%>> D:\AutoFilingDetail\AutoFilingDetailErr.log
goto LAST
) else (
copy "%~f1" "%OUTPUT_FOLDER%"
call "D:\コマンドラインごみ箱ツール GB\GB.exe" "%~f1"
)
)
:LAST
---ここまで-----
・読み込みテキストとしているfiling.txtというものが、ファイルの振り分け先とキーワードとを記述したものになります(後述)。
・大体コメントアウトで書いているので省略しますが、最後の:NEXTの箇所ではmoveコマンドで移動ではなく、copyコマンドを用いた後に、フリーソフトのGBというものを使いファイルを削除し、move(移動)を実現しています。
理由は、ゴミ箱に削除したファイルを残しておきたいからです。DELコマンドだと残らなくて引っ張ってこようとするとちょっと手間が入りますし^^;
・filing.txt
---ここから-----
振分先パス\,振分キーワード
・一行目はカラム名称で、この通りにファイルの中に振分先パス(フォルダ)と区切り文字「,」、そしてそこへ振分けるファイル名キーワードを書いてあげてください。
てなのを昨日の夕方ちょっと思いついて作ってみました
前回はフォルダ数も4つ、それぞれ固定でそこにファイルを振り分けるみたいなバッチをかきました
今回はもっと詳細な奴にしてみました
概要は以下です。
・予め作成してあるバッチファイルに、単一または複数のファイル(なんでも)をD&Dしてやると、別に用意してある設定ファイルに従い、キーワードに合致する名称を持つファイルを指定したフォルダへ移動させるというものです。
まぁ大したことはやってないです
ただ多言語はかなりやってるのにバッチやってなかったせいかえらくハマってしまいました^^;
以下バッチファイル2つと設定ファイル一つの中身について概要を記載します
・filing_detail_start.bat
---ここから-----
@echo off
:: バッチファイル自身を最小化して実行
@if not "%~0"=="%~dp0.\%~nx0" (
start /min cmd /c,"%~dp0.\%~nx0" %*
goto :eof
)
for %%a in (%*) do (call "D:\AutoFilingDetail\filing_detail.bat" %%a)
EXIT
---ここまで-----
・前回のブログでは起動時にウィンドウを最小化する方法としてSTART /MINで別のバッチから呼ぶという方法をとっていました。今回はネットの海から有能な方のソースコードを読んで使わせてもらってます。こういうのが効率的だよね^^
・そしてfor文のところで具体的にファイルを振り分けるバッチを呼び出しています。場所や名称は自環境に合わせてください。
・filing_detail.bat
---ここから-----
@echo off
:: 読込テキスト
set list_filing=D:\AutoFilingDetail\filing.txt
:: 振り分けるファイルの名称を取得
set FILE_NAME=%~n1
:: 特殊文字列の置換
set FILE_NAME=%FILE_NAME:(=[%
set FILE_NAME=%FILE_NAME:)=]%
set FILE_NAME=%FILE_NAME: = %
:: フォルダへの振り分け
for /f "skip=1 tokens=1,2* delims=," %%i in (%list_filing%) do (
set FILE_NAME_TMP=%FILE_NAME%
set OUTPUT_FOLDER=%%i
set KEYWORD=%%j
setlocal enabledelayedexpansion
rem echo !FILE_NAME_TMP!
rem echo !OUTPUT_FOLDER!
rem echo !KEYWORD!
:: 全角スペースの置換
set KEYWORD=!KEYWORD: = !
echo !FILE_NAME_TMP! | findstr /I /L /C:"!KEYWORD!"
endlocal
if not errorlevel 1 (goto NEXT)
)
goto LAST
:NEXT
if not exist "%OUTPUT_FOLDER%" (
echo "出力先パスに誤りがあります"
echo Not found: %OUTPUT_FOLDER%>> D:\AutoFilingDetail\AutoFilingDetailErr.log
goto LAST
) else (
copy "%~f1" "%OUTPUT_FOLDER%"
call "D:\コマンドラインごみ箱ツール GB\GB.exe" "%~f1"
)
)
:LAST
---ここまで-----
・読み込みテキストとしているfiling.txtというものが、ファイルの振り分け先とキーワードとを記述したものになります(後述)。
・大体コメントアウトで書いているので省略しますが、最後の:NEXTの箇所ではmoveコマンドで移動ではなく、copyコマンドを用いた後に、フリーソフトのGBというものを使いファイルを削除し、move(移動)を実現しています。
理由は、ゴミ箱に削除したファイルを残しておきたいからです。DELコマンドだと残らなくて引っ張ってこようとするとちょっと手間が入りますし^^;
・filing.txt
---ここから-----
振分先パス\,振分キーワード
E:\日記\,日記
E:\バックアップ\,backup
・一行目はカラム名称で、この通りにファイルの中に振分先パス(フォルダ)と区切り文字「,」、そしてそこへ振分けるファイル名キーワードを書いてあげてください。
・上記の例だと振分先パスが同じEドライブですが、勿論これはC:\だろうがどこだろうが構いません。
てなのを昨日の夕方ちょっと思いついて作ってみました
0コメント