いつものしらべてもでてこない

調べた事を書きます

ファイルの日付文字列から更新日時や作成日時をPowerShellを利用して一括変更する方法。スマホ(Android,iOS)の写真や動画、コマンド、フリーソフト。2022年10月更新

2022年10月15日コード部分を更新。

 スマホ(Android,iOS)やデジカメでファイルを移動していたら更新日時が書き換えられて写真の並び順がばらばらになってしまった。
どうやら本体の内蔵メモリからSDカードの様な別のデバイスに移動すると更新日時が再設定されるようだ。
これを PowerShell を利用して一括変更する方法。

 PowerShellPowerShell ISE を利用すればセキュリティ設定を変更しなくてもps.1ファイルからISEを起動して実行できます。
キーボードでのショートカット操作が下の方に書いてあります。
".ps1" ファイルを選択した状態でアプリケーションキーや右クリックメニューから、または Shift+F10,EPowerShell ISE を起動したら Ctrl を押しながら IACDV の順にキーを押して「Enterキー」で実行できます。

概要

 Android等のスマホのファイルをSDカードに移動した上でスマホから取り出してPC上でPoweShellのファイルを実行して更新日時を変更します。
以前の記事の改良版になります。

以前の記事もご覧下さい。
bannan.hatenadiary.jp

PowerShellで一括変更。

 フォルダ内の該当ファイルのみ変更しフォルダについては変更しません。
フリーソフトと書いてありますがプログラムをコピペしてPowerShellスクリプトファイルを作成します。ただしスクリプトファイルを実行する場合はセキュリティ設定の変更が必要になります。
セキュリティ設定を変更せずに実行したい場合はPowerShellを起動してスクリプトをペーストすれば実行できます。この場合はスクリプトファイルを作成する必要はありませんが何度も実行する場合はスクリプトファイルを作成しておいてコピペすると楽です。

ファイル名について

 ファイル名から日時を設定するのでファイル名に日時の文字列が必要です。
一般的な YYYY-MM-DD_HH-MM-SS と言う様な形式になります。
様なと言うのは正規表現を利用して数値の間の接続文字はあってもなくても良い様にしてあるので桁数さえ合えば変更処理が出来るようにしています。(例、photo_2020w3i4_5432-01.jpg)
ファイル名の変更については以前の記事のFlexbleRenamerの部分をご覧下さい。
Exifからファイル名を付ける場合は適当なフリーソフトを使用してください。直接ファイル名を付けるか更新日時に反映後にファイル名を付けると良いです。

PowerShellについて

 作成するフリーソフト(スクリプト)はテキストファイルにコピペして拡張子を.ps1に変更するだけのものです。
自分で作成したスクリプトでも PowerShell ISE や右クリックから実行できない場合はセキュリティ設定を確認するか変更してください。(Get-ExecutionPolicy)
 詳しくは説明しませんが「検索」か「エクスプローラーのアドレスバー」に PowerShell と打ち込んで「Enterキー」を押し起動したら Set-ExecutionPolicy RemoteSigned を入力して「Enterキー」を押 しておけば大丈夫だと思います。
RemoteSigned に設定するとセキュリティ上の危険性が少し高くなります、その為実行後は元の設定か Restricted に変更しておく事をお勧めします。
ここではファイルをダウンロードする訳ではないので Restricted のままで実行できると思います。

 PowerShellにコードを貼り付けてEnterキーで実行できます。

PowerShellを使用する設定についてはこちらをご覧下さい。
technet.microsoft.com

www.atmarkit.co.jp


管理者権限が必要な場合はPowerShellCtrl+Shift+ENTER で管理者権限で起動して実行するか一時的にUACを切る等してください。

interprism.hatenablog.com

PowerShellのコード

 デスクトップかエクスプローラーの右側の空白の適当な所を右クリックしてテキストファイルを作成してください。
テキストファイルを作成したら下のコードをドラッグして選択し右クリックメニューからコピーを選んでテキストファイルの方に貼り付けてください。
貼り付けたらファイル名と拡張子を TouchMe.ps1 に変更してください。
拡張子が表示されていない場合はエクスプローラーの設定で「登録されている拡張子は表示しない」のチェックを外してください。

拡張子を表示する方法
https://support.microsoft.com/ja-jp/help/978449


コードと処理に対応するファイルの名前。ファイルの名前の形式にある括弧内の物は有っても無くても可。日付の後のコメント部分は日本語対応。
(数字以外の文字)、日付時間の数字YYYYMMDDhhmmss形式(ハイフン等の接続文字を含む)、(ドット"."以外の文字列)、ドット"."、拡張子。

# This program is to set "CreationTime" and "LastWriteTime" with DateTime from Filename.

$args = Get-ChildItem -Path *;
foreach ($arg in $args) {
 # exclude directory
 if($arg.GetType().Name -eq "FileInfo"){
 # regular expressions, name + datetime + dot + file extension.
  $regex = [regex]"^[^\d]*(\d{4})[^\d]?(\d{2}|0?\d)[^\d]?(\d{2}|0?\d)[^\d]?(\d{2})[^\d]?(\d{2})[^\d]?(\d{2})[^.]*\..+$";
  $filename = $arg.Name;
  $m = $regex.Matches($filename);
  if($m[0] -ne $null){
    # validation
   $num = [Int]("{0,0:#}" -f $m[0].Groups[2]);
   if($num -lt 1 -Or $num -gt 12){
    Write-Output("error! $num is not valid month. $arg")
    continue;
   }
   $num = [Int]("{0,0:#}" -f $m[0].Groups[3]);
   if($num -lt 1 -Or $num -gt 31){
    Write-Output("error! $num is not valid day. $arg")
    continue;
   }
   $num = [Int]("{0,0:#}" -f $m[0].Groups[4]);
   if($num -lt 0 -Or $num -gt 23){
    Write-Output("error! $num is not valid hour. $arg")
    continue;
   }
   $num = [Int]("{0,0:#}" -f $m[0].Groups[5]);
   if($num -lt 0 -Or $num -gt 59){
    Write-Output("error! $num is not valid minute. $arg")
    continue;
   }
   $num = [Int]("{0,0:#}" -f $m[0].Groups[6]);
   if($num -lt 0 -Or $num -gt 61){
    Write-Output("error! $num is not valid second. $arg")
    continue;
   }
   # end of validation
   
   # datetime
   $dtime = "{0,0:#}/{1,0:#}/{2,0:#} {3,2:##}:{4,2:##}:{5,2:##}" -f $m[0].Groups[1], $m[0].Groups[2], $m[0].Groups[3], $m[0].Groups[4], $m[0].Groups[5], $m[0].Groups[6];
   Write-Output("set ""$dtime"" $arg");
   # 作成日時を設定
   Set-ItemProperty -LiteralPath $filename -name CreationTime -value $dtime;
   # 更新日時を設定
   Set-ItemProperty -LiteralPath $filename -name LastWriteTime -value $dtime;
  }
 }
}

if (!$psISE){
    Write-Host -NoNewLine 'Press any key to continue...';
    $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');
}

コード終わり。

日付のチェック処理で01の様な文字をSystem.Text.RegularExpression.MatchCollection型からInt型にキャストする方法がどうにも見つからなかった為、正規表現で01の様な数字の場合に先頭の0を無視する形式で文字を取り出して型変換エラーを出さないようにしているが後ろの3グループの数字についてはしていない。

使い方

 PowerShellスクリプト ".ps1" ファイルを作成し、変更したいファイルがあるフォルダにコピー又は移動して右クリックしメニューからから「実行」をクリックするだけです。

セキュリティ上の問題でPowerShellスクリプトファイルを実行できない場合はPowerShell上でスクリプトを入力、ペーストして実行する事が出来ます。右クリックメニューの編集からはPowerShell ISEを起動でき下の部分がPowerShellになっています。右クリックメニューの編集(E)は Shift+F10,E です。PowerShell ISEで実行したい場合は Ctrl を押しながら IACDV の順にキーを押して「Enterキー」で実行できます。慣れると一瞬で実行できます。
PowerShell上から実行したい場合は該当フォルダを開いて「アドレスバーの空欄部分」をクリックし PowerShell と入力して「Enterキー」を押してPowerShellを起動してください。
PowerShellスクリプトのファイル名を打ち込んで「Enterキー」を押し実行すると変更のログを見る事が出来ます
その際は出力結果をテキストファイルにリダイレクトしておくと便利です。
TouchMe.ps1 > TouchLog.txt

日付が変なファイルがあるとログに残るのでわかります。
ログに出ないファイルは名前を見て日付となる数字が見つからなかったファイルです。

注意

 フォルダ内の日付変更のみのプログラムで動作確認はしてありますがPowerShellの実行許可も含め自己責任でお願いします。


処理がすっきりした。
以上。

ZenfoneのホームアプリZenUI LauncherでGmailの新着件数(バッヂ)を表示する方法。(スマートフォン Android)

AndroidGmailは新着件数のアイコンを表示させる為にバッヂアプリを入れる必要があるようだが、
ZenUI Launcher(ホームアプリ)は新着件数を表示させるバッジ機能を持っている。
ZenUIはGmail以外にもメッセージ(SMS)やその他の新着件数を表示できる。
その設定方法。

ホーム画面に新着件数を表示する設定

まずはホーム画面の管理を開く

ホーム画面の管理

ホーム画面の空きスペースを長押ししていると「ホーム画面の管理」が出る。ホーム画面でスワイプアップしても出す事が出来る。
左下に「ユーザー設定」があると思うのでそれをタップする。

未読件数の表示設定

ユーザー設定画面が開くと「未読件数の表示設定」があるのでそれをタップする。
「バッジアプリのアイコン」をタップしてONにする。

Gmail」をタップしてチェックする。チェックする際にはZenUI Launcherにアクセス許可が必要になるのでその旨の表示が出たら設定する。
画面がそのままでGmailのチェックが出来ていたらここで完了となる。
アクセス許可が必要な場合は次へ進む。

ZenUIのアクセス許可の設定

ZenUIのアプリの画面に飛ばされたら「許可」をタップする。
以下のアクセス権限をタップして許可する。(端末の、設定>アプリ>ZenUI Launcher>許可の画面)

  • 連絡先
  • その他の権限、メール情報へのアクセス。

両方にチェックしたら端末下の戻るキーをタップすると「未読件数の表示設定」に戻れる。
SMSの件数も表示させたい場合はSMSにもチェックしておく。

戻るキーで戻ってGmailにチェックできたら完了となる。


以上。

Windows7でClassic Shellを使っていてステータスバーにファイルフォルダサイズ・空き容量が表示されなくなった場合。

Classic Shellを使うとステータスバーを表示した際にドライブの空き容量やファイルサイズを表示することが出来る。
しかし突然ステータスバーから空き容量表示が消えて不便になった。
これを元に戻す方法。

参考

と言うかそのままなのでリンク先を見てください、画像付きで分かり易いです。

gazoz.blog7.fc2.com

解決方法

実は表示されないのはIE(Internet Explorer)のアドオン管理で無効になっている所為なので有効にすれば表示される。

手順

IEを開く。
メニューバーの「ツール」をクリック。
「アドオンの管理」をクリック。
右側の一覧に「Classic Explorer Bar」があるので右クリックしてメニューを表示させる。(左クリックすると下にボタンが出るのでそれでも良い。)
「有効」をクリック。
「一緒に有効になる関連アドオン」の画面が出るので「有効」をクリック。

これでエクスプローラーを次に起動した際に有効になった状態に戻る。

原因

その時の作業から察するにWindows Updateインターネットエクスプローラが更新された事によると思われる。
アドオンの設定を聞かれて何となく無効をクリックしてしまうとこの様な事態になるかもしれない。


以上。

aviutlでh264のmuxに失敗した際に手動でx264とm4aをmuxする方法。

aviutlでmuxに失敗しましたと出た。
フォルダを見ると264ファイル(Video)とm4aファイル(Audio)があった。
これらをmuxする方法。

muxer.exeを使ってmuxする

muxはmp4コンテナに動画や音声を詰め込む作業です。
aviutlはmux出来ません、よってx264guiや拡張NVENC等は外部のmuxerでmuxしています。
aviutl上からコマンドラインで実行しているだけですので同様にコマンドラインで実行します。

yambと言うGUI操作でmuxが出来る簡単なフリーソフトもあります。
こちらは20GBを超える場合に"io error"を出して読み込めないのでここでは割愛します各自検索してみてください。
http://yamb.unite-video.com/download.html

command.exeを起動する

Windowsキーを押して検索欄にcommandと入力するとcommand.exeが候補に出るのでEnterで起動します。
フォルダ名>
と表示されると思います。
コマンドを入力する際は
>
を先頭に付けて説明します。

ここから先はファイルがどこにあるかで変わってくるのでファイルの場所を以下の様に仮定します。
aviutl
c:\aviutl\aviutl.exe

hoge.264,hoge.m4a
c:\My Video

ファイルの場所が分からない場合はエクスプローラーで場所を調べて下さい。
コマンドラインの操作はわからないかもしれませんが少しだけ説明します。

muxer.exe

さて、muxerはどこにあるかと言うとaviutlをインストールした場所で変わります。
ここでは"c:\aviutl"と仮定します。

コマンドを入力します。
>c:\aviutl\exe_files\muxer.exe

と入力してENTERを押してもだらだらと長いヘルプが出てこない場合はaviutlがどこにインストールされているか探してください。
分かった場合は次の「muxする」の項目へ進んでください。
muxerの名前はx264guiの画面を開いて右下の外部muxerのファイル名を見たり次の操作で調べてください。

コマンドは一行入力したらENTERキーを押して実行してください
>cd c:\aviutl\exe_files
>dir

dirコマンド

dirは現在のフォルダにあるファイルの一覧を表示します。
そこにmuxerがあればその名前を使ってください。

cdコマンド

cdは現在のディレクトリを移動します。
先頭の一文字を入力してからTABキーを押すと、候補がある場合は自動で次々と選択してくれるのでこれを利用しましょう。

c:\aviutlと言うフォルダがある思う場合は、
cd c:\a
と入力したらTABを何回か押す、と行った具合です。
行き過ぎた場合はSHIFT+TABで逆順になります。

muxする

muxer.exeと入力するとヘルプが出てきます。
形式的には次のように使います。
muxer.exe -i input.264?fps=60 -i input.m4a -o ouput.mp4

通常、fpsは明示する必要は無いので?fps=60は無くても構いませんがmux後にずれたりする場合は明示してください。
29.97fpsの場合は?fps=30000/1001と明示しないと駄目な場合もあります。
23.976fpsの場合は?fps=24000/1001となります。

実際には次のコマンドを入力します。
改行されている様に見えるかもしれませんが1行になっています。
>c:\aviutl\exe_files\muxer.exe -i "c:\My Video\hoge.264" -i "c:\My Video\hoge.m4a" -o "c:\My Video\output.mp4"

フォルダ名に半角スペースが混じっているのでダブルクォートで囲っていますが先に説明したカーソルキーによる入力補完を使うと自動で囲ってくれます。
-oは出力ファイル名ですが、場所を明示しないでoutput.mp4とすると現在の作業フォルダに作成されるので探さなくて済むように明示しています。

mux途中で失敗した場合

mux出来ない場合は打ち間違いかディスクスペースが一杯だと思うのでエラー表示を見て確認してください。


以上。

VFR(可変フレームレート)のMP4動画を無劣化カット編集、結合するフリーソフト

ShadowPlay(Share)やスマホ等では容量を抑えて綺麗にする為にVFR(可変フレームレート)の動画形式が良く使われている。
しかしVFRの動画は主に無劣化で編集出来るソフトが少ない為ちょっと編集するとエンコードされて段々と画質が低下してしまう。
そこで対応したソフトで簡易的なスマート編集(スマートレンダリング)を行う。

使用ソフト

UniteMovie v2.11 を使う。
ベガシスのソフトを使えば対応している筈だが普通は持っていないしフリーソフトで行う。

使用方法

カット編集に付いて説明する。
参考サイトは画像付きなので画像を見たい場合はそちらも見て欲しい。
尚、このソフト自体は動画を表示出来ない。
volx.jp


ZIPファイルを適当なフォルダに展開する。
cutmovie.exeが入っているのでダブルクリックして起動する。
起動したら編集したいファイルをドラッグ&ドロップするか参照ボタンから選択する。

「時間指定」となっている部分は左側が開始、右側が終了。
時間、分、秒、マイクロ秒?指定なので秒指定する際は「秒」の2つ隣に入力する。
「切り取り」をクリックすると指定通りに処理されて出力が終わる。
再生可能な様にキーフレームを開始位置にして切り取るので例えば30フレーム毎にしか切り取れない事がある。

出力ファイル名は初期状態で _part と言う接尾がついているが上書き確認は無い為連続で切り取り行うと上書きされる
指定時間は再生時間と少しずれる事がある様なので指定してもずれている場合はそこから1秒でもずらすと良い。

以上

ファイルの日付文字列から更新日時や作成日時を一括で変更する方法。スマホの写真や動画、コマンド、フリーソフト。

スマホでファイルを移動していたら更新日時が書き換えられて並び順がばらばらになってしまった。
調べるとスマホではアプリと対象の前後の状況によって日時が書き換えられる事があるようだ。
色々調べて試した所、大丈夫なはずのアプリでzipから解凍しても更新日時は書き換えられてしまったのでSDカードに日時を復元したファイルを入れる事にした。
但し段階的な操作が必要。

準備

ファイル名(拡張子)につけた日付部分を自動で削って変更するので手順を把握してから行いましょう。

PowerShellスクリプトを作成しました

この記事の処理は手順が2つに分かれていて処理数に制限がありやや面倒なので右クリックして実行するだけのPowerShellスクリプトを作成しました。
新しい記事をご覧下さい。
bannan.hatenadiary.jp

状況

ファイル名に日付の文字列が入っている。
日付の文字列から更新日時を変更したい。
(yyyy-mm-dd_HH-MM-SS)

若しくは
更新日時や作成日時を基準にファイル名に日付をつけたり他の日付を更新したい。

必要なソフト

更新日時が正しいならFlexible Renamerだけで良い。
www.vector.co.jp


更新日時をファイル名に付ける&戻すツール
www.vector.co.jp
注意点としてVBSなので引数の都合で150ファイル程度しか一度に処理できない。

【ソフトウェア名 】ファイルの更新日時をファイル名に付けるツールとそれを戻して更新日時へ反映するツール
http://www.vector.co.jp/soft/dos/util/se499266.html

この2つ。

大まかな手順

Flexrenaで正規表現を使ってファイル名の拡張子の後ろに必要な日時文字列を追加する。yyyymmdd_HHMMSS
RecoverDt.vbsで更新日時へと反映する。

若しくは
Flexrenaで更新日時を他の部分へコピーする。
Flexrenaで正規表現を使ってファイル名に適当な日時をつける。

作業

仮定としてyyyy-mm-dd_HH-MM-SS.pngと言うファイルを作業対象とします。
SDカードは取り外してPCに直接接続します。

ファイル名に日付文字列を付け足す。

Flexrenaでフォルダを選択。
上のメニューにある「リネーム」をクリック。
ターゲットの「ファイル」をクリックしてチェック。
フィルタは「*」で全ファイルを選択。
「サブフォルダ以下」も行いたい場合はチェック。

「高度なリネーム」をクリックしてチェック。
リネーム方法の「正規表現ラジオボタンをクリックして選択。

検索に
(\d{4})-(\d{2})-(\d{2})-(\d{2})-(\d{2})-(\d{2})(\.png)
又は
(\d{4})-?(\d{2})-?(\d{2})_?-?(\d{2})-?(\d{2})-?(\d{2}).*(\.png|\.jpg|\.mp4)

置換に
\0\1\2\3_\4\5\6
(この部分で「サポート」のリストを開くとわかるが更新日時からファイル名に日付をつけることも可能)

何もファイルを選択していない、か必要なファイルだけ選択した状態で、下の「リネーム(R)」をクリック。
何もファイルを選択していないと全ファイルを処理するか聞かれるので問題なければ「はい」をクリック。

こうすると「元の拡張子」+「yyyymmdd_HHMMSS」と言うファイルが出来上がる。「拡張子を表示する」にしていない場合はこのソフトで見ないとわからない。

ファイル名の日付文字列を削って更新日時に反映する。

出来上がったファイルを RecoverDt.vbsドラッグアンドドロップ する。ファイル名が引数になるので1度に150ファイル程度まで。
ここでyyyymmdd_HHMMSSが削られて更新日時に反映される、その為この部分しか日付が無いとファイル名から日付がなくなり判別できなくなるがFlexrenaを使えば正規表現からファイル名に書き出せるので問題ない。

更新日時を作成日時に反映する。

Flexrenaで「属性」をクリック。
タイムスタンプで「揃える」を選択。
元となる日時は「更新日時」をクリックして選択。
適用先は「作成日時」をクリックしてチェック。
下の「設定開始」ボタンをクリックして設定が完了。

終わり

ファイル名は重要。
EXIFの情報も更新できるはず。

以上。

Windows7でMicrosoft IMEを使用していると変換モードが無変換になってキーで戻せない

Windows7Microsoft IMEを使用していると変換モードが無変換になってキーで戻せない

変換していると稀に変換モードが無変換なる事が有り
あ無
となる事があってキー設定を見たがマウスを使用しないと一般に戻せなかった。
通常の無変換はA無で英数固定入力モード。

変換モードを変更するキーを設定する

キー設定を見ると変換モードを変更するキーが無い為自分で設定する必要がある。

Ctrl+変換を変換モードの変更に設定する。

Ctrl+変換入力/変換済み文字なしは使われていない筈なのでそこに設定する。

IMEツールバー(あ無○□?CANA)を右クリック。
設定(E)をクリック。
MicrosoftIMEをクリックすると右にあるプロパティをクリックできるようになるのでクリック。

Microsoft IME のプロパティウィンドウが開く。
編集操作タブをクリック。
編集操作、キー設定の変更(D)ボタンをクリック。

Microsoft IME 詳細プロパティウィドウが開く。
*キー列を見ながら下へスクロールさせるとCtrl+変換が見つかる。
Ctrl+変換のすぐ右隣の列が入力/変換済み文字なしの列で--になっているのでクリックして選択。
変更(M)ボタンをクリックできるようになるのでクリック。

機能選択ウィンドウが開く。
変換モード切替をクリック。
OKボタンをクリック。

Microsoft IME 詳細プロパティウィドウに戻るので適用をクリック。
OKをクリックして閉じる。
以上。

これで変換モードの変更Ctrl+変換で出来るようになる。
あ無になった際にCtrl+変換を何度か押せばあ般に戻す事が出来る。