「Windows 10ミニTips」は各回の作成時点で最新のWindows 10環境を使用しています。
Pythonコードをレジストリから呼び出す
筆者が企業の発表会に出席するときは、OneDrive for Businessフォルダーに企業名や日付を持つフォルダーを作成し、その中にテキストファイルや撮影した写真などを格納する。そこで常に発生する作業が、テキストファイルの新規作成だ。
ライターや記者に特有のことかもしれないが、記事(下書きやメモ書きを含む)をしたためるテキストファイルは、人によって独自のスタイルになっていたりする。必ず記載する要素、例えば日付や見出しなどがあるものだ。
こうしたテキストファイルの新規作成について、記者仲間と「毎回けっこう手間だよね」と話題になったことが、今回の出発点。いつも同じフォーマットのテキストファイルを一発で作れると、手間が省けて精神的にもよさそうだ(ひな型となるテキストファイルを用意しておき、それをコピーして使うほうが楽という話もある)。
そこであれこれと試行錯誤してみたところ、レジストリの設定だけでは不可能で、プログラミング言語を使う方法にたどり着いた。今回はPythonを使っているが、ファイル操作機能を持ち、Windows 10上で動作する言語であれば、Windows PowerShellでもPerlでもかまわない。
上記の手順は、Windows 10 バージョン1607以降で変更された拡張パスを有効にするため、レジストリの「HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Control¥FileSystem」キーにDWORD値「LongPathsEnabled」を作成し、データを「1」にセットしている。
次はPythonで簡単なコードを書く。以下のコードリストの3行目はカレントフォルダーを取得し、4行目でファイル名を付与したパスを変数「filename」に格納。6~9行目は新規作成用にテキストファイルを作り、10~11行目はエラー処理となる。なお、8行目はテキストファイルに書き込む内容なので、変更しながら試してみるとよいだろう。
import os
path = os.getcwd()
filename = str(path) + '¥¥0memo.txt'
try:
with open(filename, mode='x') as f:
f.write('■¥n□Memo¥n')
f.close()
except FileExistsError:
pass
続いて、コードを呼び出すレジストリエントリーを作成。今回は、管理者権限を持つコマンドプロンプトから「reg」コマンドを使うことにした。環境変数「LOCALAPPDATA」や「OneDriveConsumer」を使いたかったが、ダブルクォーテーションでデータを囲むと展開されないため、3行目は読者諸氏の環境に合わせてパスを変更してほしい。
reg add HKCR¥Directory¥Background¥shell¥NewTextFile /ve /d "テキストファイルを作成する(&N)" /f
reg add HKCR¥Directory¥Background¥shell¥NewTextFile /t REG\_SZ /v "Extended" /f
reg add HKCR¥Directory¥Background¥shell¥NewTextFile¥command /ve /d "C:¥Users¥kaz¥AppData¥Local¥Programs¥Python¥Python38¥python.exe C:¥Users¥kaz¥OneDrive¥Documents¥NewTextFile.py" /f
以上で作業は完了。任意のフォルダー(背景)でマウスを右クリックし、コンテキストメニューからコマンドを呼び出せば、Pythonがコードを実行してテキストファイルを新規作成する。