エクスプローラでファイルを日付で分類する事案があり、毎日フォルダを新規作成してはフォルダ名を当日日付(YYYYMMDD形式)で入力していました。同様にテキストファイルでメモを取りますが、雑多な内容のメモの場合ファイル名に悩まないように「当日日付.txt」でテキストファイルを保存していました。
このファイル名(フォルダ名)を入力する1回の作業は大した手間ではないですが、毎日のことになると結構煩わしいです。
私個人としては入力する手間より本日は何日だったか思い出すことに非常に苦労を要します。
この苦労から開放されるためエクスプローラーの右クリックメニューに当日フォルダと当日テキストファイルを作成する機能を追加してみました。
PowerShellスクリプトを初めて実行する場合
Powershellのps1ファイルを実行する方法
PowersehllをはじめるにあたりWindowsのコマンドラインインターフェースであるPowershellはコマンドレットと言われる命令をテキストファイルに記述したスクリプトファイルを実行することが出来ます。Powershellはその名...
スクリプト
メモ帳等のテキストエディタでファイル名「todayfolder.ps1」保存
<# .Synopsis 当日(YYYYMMDD形式)のフォルダを作成する .DESCRIPTION エクスプローラーのフォルダ上で右クリックメニューからスクリプトを実行することで当日日付のフォルダを作成します。 引数が無しで実行した場合スクリプトのインストール(レジストリを登録)します。 アンインストールはレジストリエディタで「HKCR:\Directory\Background\shell\todayfolder.maywork.net」を削除してください。 インストールするとps1スクリプトと同じフォルダに同名のjsファイルを作成します。 このjsファイルがエクスプローラから呼び出されps1スクリプトを実行します。 .EXAMPLE インストール (引数無しで実行) .\todayfolder.ps1 PoweShellから実行 .\todayfolder.ps1 "当日フォルダを作成するフォルダ" エクスプローラから実行 フォルダ内で右クリック→「当日フォルダ作成」をクリック #>
# アセンブリの読み込み
Add-Type -Assembly System.Windows.Forms
# レジストリーキー
$reg_key = "HKCR:\Directory\Background\shell\todayfolder.maywork.net"
# 当日フォルダを作成する本体
if ($Args.Count -ne 0) {
$path = $Args[0];
if (-not(Test-Path -LiteralPath $path)) {exit}
$today = (Get-Date).ToString("yyyyMMdd")
$new_path = Join-Path $path $today
if (-not(Test-Path -LiteralPath $new_path)) {
$r = mkdir $new_path
}
exit
}
# 以下インストール作業
if (-not(Test-Path -LiteralPath "HKCR:")) {
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
}
if (Test-Path -LiteralPath $reg_key) {
echo "インストール済み"
$result = [System.Windows.Forms.MessageBox]::Show("インストール済み", "スクリプトのインストール")
} else {
echo "未インストール"
$ps_path = (Get-Item -LiteralPath $MyInvocation.MyCommand.Path)
$ps_exe = Join-Path $pshome 'powershell.exe'
# メッセージボックスの表示
$result = [System.Windows.Forms.MessageBox]::Show(($ps_path.BaseName+"をレジストリに登録しますか?"), "スクリプトのインストール", "OKCancel")
if ($result -eq "Cancel") {
echo "キャンセル"
exit
}
# ラッパー用jsスクリプトの作成
$js_path = Join-Path $ps_path.DirectoryName ($ps_path.BaseName + ".js")
$file = New-Object System.IO.StreamWriter($js_path, $false, [System.Text.Encoding]::GetEncoding("sjis"))
$file.WriteLine('wsShell = WScript.createObject("WScript.Shell");')
$file.WriteLine('retCode = wsShell.Run("\"' + ($ps_exe.Replace('\', '\\')) + '\" -File \"' + ($ps_path.FullName.Replace('\','\\')) + '\" \"" + WScript.Arguments.Item(0)+"\"",0,true);')
$file.WriteLine('WScript.Quit(retCode);')
$file.Close()
echo $ps_exe
New-Item -Path $reg_key
New-ItemProperty -Path $reg_key -Name "(default)" -PropertyType STRING -Value "当日フォルダ作成"
$sub_reg = ($reg_key + "/command")
#$sub_value = '"' + $pshome + '\powershell.exe" "-WindowStyle" "Hidden" "-NoLogo" "-File" "' + $MyInvocation.MyCommand.Path + '" "%V"'
$sub_value = 'wscript.exe "' + $js_path + '" "%V"'
New-Item -Path $sub_reg
New-ItemProperty -Path $sub_reg -Name "(default)" -PropertyType STRING -Value $sub_value
echo $sub_value
}
メモ帳等のテキストエディタでファイル名「todaytextfile.ps1」保存
<# .Synopsis 当日(YYYYMMDD形式)のテキストファイルを作成する .DESCRIPTION エクスプローラーのフォルダ上で右クリックメニューからスクリプトを実行することで当日日付のフォルダを作成します。 引数が無しで実行した場合スクリプトのインストール(レジストリを登録)します。 アンインストールはレジストリエディタで「HKCR:\Directory\Background\shell\todaytextfile.maywork.net」を削除してください。 インストールするとps1スクリプトと同じフォルダに同名のjsファイルを作成します。このjsファイルがエクスプローラから呼び出されps1スクリプトを実行します。 .EXAMPLE インストール (引数無しで実行) .\todaytextfile.ps1 PoweShellから実行 .\todaytextfile.ps1 "テキストファイルを作成するフォルダ" エクスプローラから実行 フォルダ内で右クリック→「当日テキストファイル作成」をクリック #>
# アセンブリの読み込み
Add-Type -Assembly System.Windows.Forms
# レジストリーキー
$reg_key = "HKCR:\Directory\Background\shell\todaytextfile.maywork.net"
# 当日テキストファイルを作成する本体
if ($Args.Count -ne 0) {
$path = $Args[0];
if (-not(Test-Path -LiteralPath $path)) {exit}
$today = (Get-Date).ToString("yyyyMMdd")
$new_path = Join-Path $path ($today + '.txt')
if (-not(Test-Path -LiteralPath $new_path)) {
New-Item -ItemType file $new_path | Out-Null
}
exit
}
# 以下インストール作業
if (-not(Test-Path -LiteralPath "HKCR:")) {
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
}
if (Test-Path -LiteralPath $reg_key) {
echo "インストール済み"
$result = [System.Windows.Forms.MessageBox]::Show("インストール済み", "スクリプトのインストール")
} else {
echo "未インストール"
$ps_path = (Get-Item -LiteralPath $MyInvocation.MyCommand.Path)
$ps_exe = Join-Path $pshome 'powershell.exe'
# メッセージボックスの表示
$result = [System.Windows.Forms.MessageBox]::Show(($ps_path.BaseName+"をレジストリに登録しますか?"), "スクリプトのインストール", "OKCancel")
if ($result -eq "Cancel") {
echo "キャンセル"
exit
}
# ラッパー用jsスクリプトの作成
$js_path = Join-Path $ps_path.DirectoryName ($ps_path.BaseName + ".js")
$file = New-Object System.IO.StreamWriter($js_path, $false, [System.Text.Encoding]::GetEncoding("sjis"))
$file.WriteLine('wsShell = WScript.createObject("WScript.Shell");')
$file.WriteLine('retCode = wsShell.Run("\"' + ($ps_exe.Replace('\', '\\')) + '\" -File \"' + ($ps_path.FullName.Replace('\','\\')) + '\" \"" + WScript.Arguments.Item(0)+"\"",0,true);')
$file.WriteLine('WScript.Quit(retCode);')
$file.Close()
echo $ps_exe
New-Item -Path $reg_key
New-ItemProperty -Path $reg_key -Name "(default)" -PropertyType STRING -Value "当日テキストファイル作成"
$sub_reg = ($reg_key + "/command")
#$sub_value = '"' + $pshome + '\powershell.exe" "-WindowStyle" "Hidden" "-NoLogo" "-File" "' + $MyInvocation.MyCommand.Path + '" "%V"'
$sub_value = 'wscript.exe "' + $js_path + '" "%V"'
New-Item -Path $sub_reg
New-ItemProperty -Path $sub_reg -Name "(default)" -PropertyType STRING -Value $sub_value
echo $sub_value
}
インストール
PowerShellを管理者で起動しスクリプトを実行。引数無しで実行してください。
.\todayfolder.ps1
.\todaytextfile.ps1
途中インストールするか確認のメッセージボックスが出ます。
インストールが成功するとエクスプローラの右クリックメニューに「当日フォルダ作成」「当日テキストファイル作成」が追加されています。
使い方
1.フォルダ内で右クリック
2.「当日フォルダ作成」をクリック
3.当日フォルダが作成されます。
4.次にテキストファイルを作成します。同様にフォルダで右クリックします。
5.「当日テキストファイル」をクリック
6.「当日テキストファイル」が作成されました
スクリプトの実行環境
- プロダクト名
- Windows 10 Home
- ビルド番号
- 17763.379
- Powershellバージョン
- 5.1.17763.316
- .NET Framework
- .NET Framework 4.7.2
注意事項
- このスクリプトはレジストリを変更します。
- アンインストールする場合はレジストリエディタで該当の項目(スクリプト参照)を削除してください。
- ps1スクリプトファイルの場所を移動又は削除するとこのスクリプトは実行しません。レジストリを削除後再度インストールを実行してください。
コメント