スナック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で日付を比較する方法

たるんでおりました。反省。

f:id:elve:20211229194146p:plain
昨日休みのカズが上野に飲みに行っていて、すごい人だったよ~だの、どこで買ってどのくらいフラフラしてたのかもわからないやたら大きなマグロを買って帰ってきたりしてたのです。
上野に行く予感はしていたので、オミクロンさんは年末年始だからって感染力弱まるわけじゃないのよ~位は言ったのですが、何を隠そうワタクシも一昨日飲みに行っておりまして・・・。あまり強くは止められない(;´Д`)

ちなみに行ったのはこちらで、18時時点ではガラガラでした。(言い訳)

韓豚屋 八重洲店
〒103-0028 東京都中央区八重洲1-4-16 東京建物八重洲ビルB2
3,200円(平均)850円(ランチ平均)
r.gnavi.co.jp

で、今日仕事中にカズ@お休みから電話。
「熱が出た。発熱外来に行ってくる」

うわぁぁあぁぁぁ~まじかよ~~(´;ω;`)
まぁそうなりますよねー自業自得ですよねーorz

一生懸命仕事を片付けて、明日もお休みすることにして午前中で帰るとカズは顔真っ赤にして寝てました。38℃位ある、とのこと。氷嚢使おうかと思っても嫌がるし脇の下冷やしたらいいらしいよね、とか言い出す始末。好きにしろよ。

まーそんで結局連絡なかったので陰性だったみたいなんですが、すごく反省しました。



カズがマネージャーにアレコレ聞かれていて「核酸」の「酸」が読めなかったり、「そんで~」「だから~」とか話ししてたり、46の社会人の会話じゃない感すごかったです(ノД`)ナェルシク
カズは引き続き自宅待機命令が出た模様。

あっしは今日皆さんに頭下げまくって良いお年を~とか言って帰ってきたのに出社できるらしいです(ノД`)ナェルシク
休みたかっ(ry

とりあえず、陰性で良かった。

皆様、まだまだコロナ禍です。外でマスクを外したら喋らない。しゃべるときはマスクをする。基本の「き」でございました。
なかなか気が滅入りますが頑張りましょう。

最近作ったもん

www.kurashiru.com

のガーリック香る 鶏もも肉のマヨポン炒めと次のページの牛肉とトマトのキムチーズ焼き(牛肉→豚肉)

f:id:elve:20211226193626j:image

 

cookpad.com

の鍋のタレにあるものを入れようとして間違えてサラダ用のカット野菜を入れたの図。

美味しかったよ(´;ω;`)

f:id:elve:20211226193630j:image

housefoods.jp

を作ろうと思ったけど種がゆるくてやや失敗(美味しかったよ(´;ω;`))

f:id:elve:20211226193650j:image

うーむ・・・。

f:id:elve:20211226191921p:plain
まだうまくできてません。

googleフォトをOneDriveに移しました。
アレコレしましたが・・・
snack.elve.club

コレが確実そうでした。
他のオンライン ストレージ サービスからデータを移行する - OneDrive 使い方ガイド - 楽しもう Office

そうすっとですね・・・「Photos from YYYY」ってフォルダの中にだーっと入ってるんですよ。
年フォルダ/月フォルダ で分けたい・・・。

フォルダ作ってファイルの撮影日時か作成日時を取得して移動するだけ・・・だけなんすよ。

練習に丁度いいかと、初めてのTypescriptです。やめとけw

Pythonの古いのアンインストールしたり寄り道しまくりまして、よくわからないけどvscodeで動くようになりました。

でね・・・。
撮影日時を取得するのに「ExifTool」ってのを使うと良さげだぞ、と。
exiftool.org

で、だ。
FileModifyDate で取ろうとしてコケて、dir使おうとしてコケて、わきゃーってなってるところです。
ターミナルからは

PS C:\node> ./exiftool -T -DateTimeOriginal  'C:\Users\user\OneDrive\画像\カメラ ロール\Photos from 2015\DSC00730.JPG'
2015:04:03 10:29:07

と、取得できとる。
powershell? よくわからんのだよ(´;ω;`)
今の所すべてのデータが12フォルダに入るという地獄状態(´;ω;`)

Pythonのほうが簡単なのかしら(;´Д`)

またお前か、文字コード!! とかやってます。ひぃ~ん(´;ω;`)