スクリーンショットの番号をリセットする

OS: Windows 10 version 1709

Winキー+PrtScキーでスクリーンショットを撮影すると自動的に採番されてファイル名に付与される。これをリセットして1から採番するようセットするのであれば以下のレジストリキーを操作すればよさそうである。

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer
Name: ScreenshotIndex
Type: DWORD

コマンドプロンプトから実行するならこういう具合である。

>reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer" /v ScreenshotIndex /t REG_DWORD /d 1 /f

ScreenshotIndexのデータに1を入力することで1から採番が始まったのでリセットできたと見做して差し支え無かろうと思う。なお、スクリーンショットを21億4748万3647枚撮影すると次は符号が反転して-2147483648が採番され引き続き1ずつ増加してゆく。42億9496万7296枚撮影したところで数値が再び1からカウントされる。またインデックスの数値がすでにファイル名で使用済みであると重複しないように採番されてゆく模様である。

参考:
Q: Windows 10 Screenshot

bashで変数をechoする際に文字列に含まれるアスタリスクがワイルドカードとして扱われないようにする

シェルスクリプトを組み上げる際に見栄えを考慮してオシャレなメッセージを表示しようとしたところ予期せぬ結果に困惑したものである。

$ msg="*** select * from avava;"
$ echo ${msg}
public_html src tmp select public_html src tmp from avava;

アスタリスク * がワイルドカードとして展開されているからいけない。これを抑制するには変数をダブルクォーテーションで囲い込んでやればよいのであった。

$ echo "${msg}"
*** select * from avava;

bashのマニュアルによればset -fやset -noglobコマンドによってダブルクォーテーションのあるなしに拘わらずアスタリスクをワイルドカードとして展開しないようにできる模様である。然し乍らあらゆる場合に於いてパス名の展開がおこなわれなくなるので影響を及ぼす範囲が明瞭でないなら控えたほうが良さそうな情勢である。

$ man bash
(snip)
       set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
       set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]
              -f      Disable pathname expansion.
              -o option-name
                      noglob  Same as -f.

一旦展開しないようセットしたものの気が変わってやはり元の仕組みが嬉しい向きにはset +fやset +noglobを実行すればよろしい。

$ set -f
$ echo ${msg}
*** select * from avava;
$ echo "${msg}"
*** select * from avava;
$ ls *
ls: cannot access *: No such file or directory
$ set +f
$ echo ${msg}
public_html src tmp select public_html src tmp from avava;
$ echo "${msg}"
*** select * from avava;

cronでの実行時刻を秒まで指定したい

毎分0秒と30秒に実行したいプログラムがあったのであるけれども、cronで指定できる時刻の最小単位は 分 までであるから工夫を凝らさなければならない。そこでプログラムの実行前にsleepを実施するのである。これで時刻を秒単位まで意のままに指定できるのである。

$ crontab -e
* * * * * sleep 30; /bin/bash /home/guro/scripts/avava.sh