スナックelve 本店

バツイチ派遣40代女性の日記です

ファイル情報から一番古い日付を取得せよ

f:id:elve:20211231164555p:plain


snack.elve.club
の続き

プロパティはこんな感じ

f:id:elve:20211231153548p:plain
f:id:elve:20211231153552p:plain
f:id:elve:20211231154435p:plain

まず文字コードじゃ!!

ワイほんとコマンドとかscriptとか苦手なのに輪をかけてpowershell嫌いや(ノД`)ナェルシク
パスに日本語入ってると化けてだめなんで、
kuluna.github.io

f:id:elve:20211231162706p:plain
f:id:elve:20211231162800p:plain
f:id:elve:20211231162826p:plain
再起動や!!

ソース

const fs = require('fs');
const { spawnSync } = require('child_process');

//UTF-8
let path = "C:\\Users\\user\\OneDrive\\画像\\カメラ ロール\\2018\\IMGP2661.JPG";

const stats = fs.statSync(path);
let d = [];

// 最終アクセス時刻
d.push(new Date(stats.atime));
// 最終修正時刻
d.push(new Date(stats.mtime));
// 最終状態変更時刻
d.push(new Date(stats.ctime));

//exiftoolで取れそうな日付タグ
let tag = ["FileModifyDate", "FileAccessDate", "FileCreateDate", "CreateDate", "ModifyDate", "MetadataDate", "DateTimeOriginal", "CreateDate"];

// シェル上で実行するコマンド
let i;
let COMMAND = "C:\\node\\exiftool";
for (i of tag) {
    let re = spawnSync(COMMAND, ["-T", "-" + i, path]);
    console.log(i);

    if (re.stdout === null) {
        console.log(re.error.toString());
    } else {
        console.log(re.stdout.toString());
        let tmp = re.stdout.toString().replace("'", "");
        tmp = tmp.replace(/\r?\n/g, "");
        tmp = tmp.replace(":", "-");
        if (tmp != "-") {
            d.push(new Date(tmp));
        }
    }
}
let minD = Date.now();
for (i of d) {
    if (minD.valueOf() > i.valueOf()) {
        minD = i;
    }

}
console.log(minD);

出力

C:\Program Files\nodejs\node.exe .\一番古い日付.ts
FileModifyDate
2021:12:19 04:28:56+09:00
FileAccessDate
2021:12:31 15:31:36+09:00
FileCreateDate
2021:12:24 21:17:46+09:00
CreateDate
2018:04:07 14:51:35
ModifyDate
2018:04:07 14:51:35
MetadataDate
-
DateTimeOriginal
2018:04:07 14:51:35
CreateDate
2018:04:07 14:51:35
Sat Apr 07 2018 14:51:35 GMT+0900 (日本標準時)

後はフォルダごとにぐるぐる回して月を取得してフォルダ移動すれば・・・。

参照

exif(jpegファイルの情報)<Javascript<木暮仁
JavaScript:Date【日時】オブジェクト 文字列 ⇔ 日時 変換関連 メソッド - リファレンス メモ
テキストを扱う — JavaScript での文字列 - ウェブ開発を学ぶ | MDN
Array - JavaScript | MDN
Date - JavaScript | MDN
Date() コンストラクター - JavaScript | MDN
Date.prototype.valueOf() - JavaScript | MDN
String.prototype.replace() - JavaScript | MDN
PowerShell 開発のための Visual Studio Code の使用 - PowerShell | Microsoft Docs
NodeJSのfsライブラリでファイルの作成日を取得する | himenon.github.io
document.fileCreatedDate - ドキュメント作成日を得る - JavaScriptリファレンス
JavaScript/Node.jsでエンコーディング変換を扱うことができる、iconv-liteを試す - CLOVER🍀
配列をループで処理する (for, forEach, for-of) | まくまくJavaScriptノート
【初心者向け】JavaScriptの配列の基礎的な使い方!プログラミングに配列は必須! | Geekroid
https://note.affi-sapo-sv.com/js-garbled-characters.php
JavaScriptで日付(Date)をフォーマットする3つの方法 | PisukeCode - Web開発まとめ
JavaScriptで数値の桁数を合わせる(ゼロパディング)方法 - JavaScriptテックラボ - [SMART]
JavaScriptでjpeg画像のexif情報を取得する(exif-js使用) - Symfoware
JavaScriptで処理を終了する方法を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン
JavaScriptでnullを判定する方法を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン
JavaScriptで文字列を日付オブジェクトに変換する方法を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン
【JavaScript】if文を使った条件分岐の書き方|TECH PLAY Magazine [テックプレイマガジン]
JavaScript - Node.jsで取得した.lnkファイルのリンク先パスが文字化けする(windows)|teratail
JavaScript - javascript でプロパティファイルの値を取得する方法|teratail
JavaScript - encoding japaneseで文字列から、変換された文字コードの文字列を取得する|teratail
TypeScript spawnSyncの例、child_process.spawnSync TypeScriptの例 - HotExamples
テンプレートリテラル - TypeScript Deep Dive 日本語版
JavaScriptで文字列を数値に変換する:Number(), parseInt(), parseFloat() | UX MILK
JavaScriptで【日付(Date)型⇔文字列(String)型】に変換する方法 | ぱーくん plus idea
JavaScript で文字列を日付に変換する | Delft スタック
JavaScript で 2つの日付を比較する方法 | Delft スタック
JavaScript 関数を終了する | Delft スタック
split 年月日 javascript - Google 検索
JavaScript | 文字列を正規表現を使った区切り文字で分割する(String.prototype.split)
JavaScript | 特殊な文字の入力(エスケープシーケンス)
日付が有効かチェックする | JavaScript Tips
【JavaScript入門】split()で文字列の分割&正規表現の活用法まとめ! | 侍エンジニアブログ
creationDate JavaScript and Node.js code examples | Tabnine
これなら絶対わかる!JavaScriptの変数と型の基礎をいまこそ理解する – WPJ
JavaScriptで日付を比較する方法