1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[JavaScript/node/Bat] 特定フォルダ下位にある画像ファイルをランダムで開く

Last updated at Posted at 2022-03-21

Windowsです。

BingWallPaperナントカってアプリをいれて、Bingの背景画像を壁紙にしてくれて日々、きれいな壁紙が切り替わるようにしています。

が、5,6枚くらいしか前画像をたどれなくて、ときどきBingが虫とか植物の拡大写真や動物の変な写真がアップされて気に食わなかったりするときがありまう。俺は生物系ではなく風景の写真が壁紙になってほしいのです。生物系はぎょっとしたりキモかったりするときもあるので、壁紙にしたくない。(今日とかカエルだし、人を選ぶだろ、カエル画像とかさあ)

で、壁紙ファイルは次の場所に保存されていることがわかり、昔みた壁紙ファイルも保持されているからよかったのです。

C:\Users<ユーザー名>\AppData\Local\Microsoft\BingWallpaperApp\WPImages
C:\Users<ユーザー>\OneDrive\画像\Bing Images

で、この中でお気に入りな画像を特定のフォルダに保存しています。

画像ファイラは、MassiGra使っているので、画像をみて気に入ったものがあれば壁紙に簡単にできるのですが、今回はこれをランダムで選びたいなと思いました。

コード

RandomOpenFile.js.bat
//&cls&node %0 %1&exit

// -----

// Main
var childProcess = require('child_process');
const fs = require('fs');
const path = require('path');

const readSubDirSync = (folderPath) => {
  let result = [];
  const readTopDirSync = ((folderPath) => {
    let items = fs.readdirSync(folderPath);
    items = items.map((itemName) => {
      return path.join(folderPath, itemName);
    });
    items.forEach((itemPath) => {
      if (fs.statSync(itemPath).isDirectory()) {
        readTopDirSync(itemPath);
      } else {
        result.push(itemPath);
      }
    });
  });
  readTopDirSync(folderPath);
  return result;
};

const _randomInt = (min, max) => {
  return Math.floor(Math.random() * (max + 1 - min)) + min;
};

// Batファイルに引数が渡ってくるときだけ
// フォルダ列挙して下位ファイルをランダムで開く
const argsArray = process.argv.toString().split(',');
if (argsArray.length === 3) {
  const folderPath = argsArray[2];

  let items = readSubDirSync(folderPath);
  items = items.filter(item => {
    const filename = item.toLowerCase();
    return (
      filename.endsWith('.jpg') ? true
      : filename.endsWith('.png') ? true
      : false
    )
  })
  const openFileIndex = _randomInt(0, items.length - 1);
  childProcess.exec(`${items[openFileIndex]}`);
}

setTimeout(() => {
  process.exit()
}, 100);

上記のコードだと、引数でパス渡さないと動かなくて、.lnkファイルを編集してフォルダパスを引数で渡してもいいのですがやや不便なので、同じフォルダにこのbatを呼び出す別batを定義します。

RandomOpenFile_壁紙.bat
call RandomOpenFile.js.bat "C:\..\...\...\壁紙"

これで、RandomOpenFile_壁紙.bat を呼び出すと、そのフォルダ下位にあるjpgかpngファイルをランダムに開きます。jpgやpng は MassiGra に関連づいているので、そこから壁紙にすることができます。

よかった。ちょっと便利。

壁紙はランダムにその日の気分とかで選びたいこともあったりなかったり。

参考

Batファイルとして Node.js の JavaScript ファイルを動かす方法 - Qiita
https://qiita.com/standard-software/items/51ca6f721017a07ca010

node.js ファイル一覧の取得- Qiita
https://qiita.com/standard-software/items/e37bfd1db0f5ada192cf

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?