株式会社シベスピ 従業員ブログ

シベスピの社員ブログ。技術・想い・経験沢山書いていきます!

指定したファイルを検索し取得するWindowsバッチ

お久しぶりです。SBです。

今回はファイルのコピーを行ってくれるバッチファイルを紹介します。
ただコピーしてくるだけではなんなので以下の点の機能を追加しています。
・指定したパス以降の対象ファイルを自動的に検索して取得してくる。
・list.txtに記載された複数のファイルを一括で取得してくる。

以下がソースです。

@echo off
set /P FROM_PATH="取得元フォルダを入力してください"
set TO_PATH=%~dp0
set START_TIME=%DATE% %TIME%
cd %FROM_PATH%
for /f "tokens=*" %%i in (%TO_PATH%\list.txt) do (
echo %%i
call :doget "%%i"
)
pause
exit
:doget
for /f "tokens=*" %%a in ('dir %1 /b /s /a:-h') do (
echo 【%START_TIME%%%a >> %TO_PATH%結果.txt
echo 元ファイル %%a
copy /y "%%a" "%TO_PATH%"
)
exit /b


echoやオプションなどの細かい箇所は省きますが、6~9行目の

for /f "tokens=*" %%i in (%TO_PATH%\list.txt) do (
echo %%i
call :doget "%%i"
)

にて、list.txtの中身を検索対象として次の取得処理に渡しています。
"tokens=*"をつけないとスペースが入ってるファイルを正しく取得できないので注意。


後は以下の箇所で渡されたファイル名をdirコマンドで検索し、コピーしてきます。

for /f "tokens=*" %%a in ('dir %1 /b /s /a:-h') do (
echo 【%START_TIME%】%%a >> %TO_PATH%結果.txt
echo 元ファイル %%a
copy /y "%%a" "%TO_PATH%"
)


実行するとこんな感じになります。

f:id:chivsp:20191222215448p:plain
バッチ実行結果

copyのコマンドを変えて逆に配置したり、別のコマンドにしたりすることなんかもできると思います。

以上、SBでした。