こんにちは、デザイナーの藤井です。
最近、複数のファイルに対して、ある処理を自動で実行したいと思って色々調べていました。
やりたいことは、
.batファイルに対して、ファイルまたはフォルダをドラッグ&ドロップし、
そのファイルに対して処理を実行
で、
・ファイルのみ
・フォルダのみ
という事であれば割りと簡単に出来たのですが、
ドラッグ&ドロップされたのが【ファイルなのか?】【フォルダなのか?】というのを判断する方法がわからず、ネットの海に出ました。
調べてみると、色々な方法があったのですが、
今回は下記のサイトを参考にさせて頂きました。
そして、出来たのが下記のスクリプトになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
@echo off pushd %~dp0 if "%~1" == "" ( echo ファイル もしくは フォルダ をドラッグ&ドロップしてください pause ) echo ================ :loop call :Func_dirOrFile %1 shift if not "%~1" == "" goto loop echo ================ pause popd exit rem ================================ rem ファイル属性のチェック rem ================================ :Func_dirOrFile set attr=%~a1 if %attr:~0,1%==d ( call :Func_dir %1 ) else if %attr:~0,1%==- ( call :Func_file %1 ) exit /b rem ================================ rem フォルダの場合 rem ================================ :Func_dir echo ■フォルダ:%1% set dirName=%1 for /F %%i in ('dir /s /b %dirName%\*.*') do call :Func_file %%i exit /b rem ================================ rem ファイルの場合 rem ================================ :Func_file set attr=%~a1 if %attr:~0,1%==- ( echo ▼ファイル:%1% call :Func_cmd %1 ) exit /b rem ================================ rem ファイルに対して実行したい処理 rem ================================ :Func_cmd set file=%1 echo ここでファイルに対して実行 exit /b |
とりあえずフォルダとファイルの名前を出力するだけになっています。
もっと上手い書き方があるかもしれませんが、
今回は動いたのでこれでよしとしましょう…。
便利な世の中になったもので、大抵の事はネットで調べれば解決出来ちゃいますね…。
ちなみに、
1 |
for /F %%i in ('dir /s /b %dirName%\*.*') do call :Func_dir %%i |
を
1 |
for /F %%i in ('dir /s /b %dirName%\*.ma') do call :Func_dir %% |
のように変更すると、
特定の拡張子のファイルのみ、参照する事ができます。
また、
1 |
echo ここでファイルに対して実行 |
を
1 2 |
set maya_cmd="実行したいコマンド" start /wait "" "C:\Program Files\Autodesk\Maya2015\bin\mayabatch.exe" -command %maya_cmd% |
のようにすると、
バッチモードで(画面を立ち上げずに)mayaを実行する事も出来ます。
※上記の“実行したいコマンド”は仮のものです。
本職のプログラマさんには全然敵わないのですが、やってると楽しいですね。
なお、今回の記事の内容につきまして、動作確認はしておりますが、有用性、安全性についてなどは一切保障しておりません。
この記事の中で公開しているバッチスクリプトを使用した事で生じた全ての障害・損害・不具合につきましては、一切の責任を負いませんので、自己責任にて、ご使用ください。
(Visited 10,802 times, 1 visits today)