スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

フォルダ内のファイルをランダムに開く!

今日はプログラミングの話題です。
梅雨に入りましたし、家の中でブラウザばかり見てるだけではなく、何か学習してみましょう!みたいな。

ちなみに今日のお題は「フォルダ内のファイルをランダムに開く」です。
たとえば、とあるフォルダに画像ファイルがたくさんあるが、その中のどれか1つを開く、そのとき、
どのファイルが選ばれるかは運次第
というシチュエーションです。

まぁはっきり言ってプログラミング的には全然難しく無い話ですが、
それをコマンドプロンプトでやってしまおうっていうのが今回のキモです。
では、見ていきましょう。

まず、以下を選択してコピーし、メモ帳に貼り付けて、適当な名前で保存します。


@echo off
cd /d %~dp1
cd
for %%f in (*.jpg) do set /a i=i+1
set RANDVAL=%RANDOM%
set /a RESULT=%RANDVAL% %% %i%
echo %RANDVAL% %% %i% = %RESULT%
for %%f in (*.jpg) do call :sub %%f
goto :fin
:sub
set /a N=N+1
if %n% EQU %RESULT% start %1
goto :eof
:fin



じつは適当な名前では動かないので、保存した場所をエクスプローラーで開き、
拡張子をBATに変更します。
そしてこのBATのショートカットを、
C:\Users\<ユーザ名>\AppData\Roaming\Microsoft\Windows\SendTo
に作成してください(これは、Vistaとか7の場合です。WindowsXPは違うので注意)

そして画像フォルダに行き、適当に1つファイルを選択してから、
送る→適当につけたBATファイル名
を実行すると、数秒後にフォルダ内の一つのファイルが開かれます。
(画像ならば、その画像ファイルを開いてくれるでしょう)
画像とかテキストとか当たり障りのないファイルが置いてある場所で実行するようにしてください。
変な実行ファイルとかが置いてあると、間違って実行してしまう可能性があります。
とか注意事項を書いてても、注意してくれない人がいると思うので
jpg画像のみしか対象にしない仕様に改造してあります。

まぁどうしても他の種類のファイルを扱いたければ、以下を読んで改造しなおすか、プログラムを作りましょう。

それでは、各行の解説です。


@echo off
これはお馴染みですよね。見栄えを綺麗にするという感じで、いちいちコマンドラインを表示させない指定ですね。


cd /d %~dp1
SendTo経由で呼び出されると、いちおうファイル名も貰えるのですが、そのファイル名は、%1変数に
入ってきます。この%1の中は、ドライブ名(d)+フォルダパス(p)+ファイル名(n)という構成
になっているので、ドライブ名とフォルダパスを
%~dp1
このようにして抽出し、そこにcd(チェンジディレクトリ、移動)するようにしています。


cd
cdコマンドは、引数無しの場合、現在のディレクトリ名(フォルダパス)を表示します。

for %%f in (*.jpg) do set /a i=i+1
フォルダのファイルを数えています。ここで対象にしているのは、先ほどチェンジディレクトリしてきた
フォルダ内の*.jpgファイルとなります。
この*.jpgを書き換えれば、別のタイプのファイルを扱えますが、下のほうにも同じように*.jpgと
書いてある部分も書き換える必要があります。

set RANDVAL=%RANDOM%
これは乱数取得しています。

set /a RESULT=%RANDVAL% %% %i%
取得した乱数は0~32768の数字です。
これをさきほどのファイル数で、割り算し、あまった数値を %RESULT%変数に入れています。

echo %RANDVAL% %% %i% = %RESULT%
上の割り算の計算式を画面に表示しています。

for %%f in (*.jpg) do call :sub %%f
フォルダの全ファイルに対して、:sub処理を呼び出しています。


:sub
ファイル毎に呼び出される:subの始まりを表しています。

set /a N=N+1
変数Nを1増やします。最初の変数Nの値は0なので、1ファイル毎に1増えていきます。


if %n% EQU %RESULT% start %1
さきほど計算した、乱数値をファイル数で割った余りの値と、
上の行で計算した変数Nの値を比較しています。
同じであれば、Start命令をかけます。
Start命令は、ファイルを開く、という行為になります。
今回はJPGファイルを対象としているので、画像が画面に表示されることになります。

goto :eof
:subが終わった事を意味します。:subが終わると、呼び出しもとの
FOR文に処理が戻ります。

goto :fin
これは、:subの前にあります(今回は解説用にこちらに持ってきただけです)。
この命令が来ると、:finにジャンプします。

:fin
ラベルだけ書いてあります。この後ろに行がなければ、
batファイルの実行は終了します。




スポンサーサイト

この記事のトラックバックURL

http://alphaiota.blog105.fc2.com/tb.php/426-857dc3b9

コメント

こんばんちゃ。
めっちゃ久しぶり。
って覚えてないでっか?

最近、復活しますた!
またよろー(。・∀・)ノ

コメントする

管理者にだけ表示を許可する

Template Designed by DW99

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。