📝
PowerShellでtouchコマンドを使う方法
はじめに
PowerShellってcdとかmkdirとかは使えるのに、
touchコマンドは使えないのちょっと不便だなーって思ってました。
ここではtouchコマンドを使えるようにするために、functionとaliasをprofileに記載する方法を紹介します。
※ 方法のみ確認したい方はこちらから
記事の更新
- 2024/05/12
関数名を変更しました。
オプションを4つ追加しました(-a、-c、-m、-t)。
touchコマンドについて
そもそもtouchコマンドとは
touchコマンドは、「ファイルのタイムスタンプ(日付と時刻の記録)を変更することができるもの」らしいです(IT用語辞典)。
また、新規の空ファイルを作成するためにも使用されます。
(個人的には空ファイル作成の用途しか知りませんでした...)
touchコマンドで使えるオプション
IBMのページを参考にすると、touchコマンドのオプションは以下のようにまとめられます。
touch [ -a ] [ -c ] [ -m ] [ -r RefFile ] [ Time | -t Time ] { File ... | Directory ... }
- -a: ファイルのアクセス時刻を更新する
- -c: ファイルがまだ存在していない場合はファイルを作成しない
- -m: ファイルの修正時刻を更新する
- -r: 別のファイルの時刻を参照してファイルの時刻を更新する
- -t: 新しいタイムスタンプを指定してファイルの時刻を更新する
今回はPowerShellで以上の5つのオプションのうち、
- -a
- -c
- -m
- -t
の4つを使えるようにします。
PowerShellでtouchコマンドを使う方法
動作環境
- Windows 11
- PowerShell 7.4.2 (Windows Terminal)
- Visual Studio Code
設定手順
- PowerShellを開きます。
- 次のコマンドを入力し、Microsoft.PowerShell_profile.ps1を開きます(VSCodeがインストールされていることが前提です)。
code $PROFILE
- 開いたps1ファイルに、以下のコードをコピペします。
function Touch-Command {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$FilePath,
[switch]$a, # ファイルのアクセス時刻を更新する
[switch]$c, # ファイルが存在しない場合はファイルを作成しない
[switch]$m, # ファイルの修正時刻を更新する
[string]$t # 新しいタイムスタンプを指定してファイルの時刻を更新する
)
# ファイルが存在しない場合かつcオプションが指定された場合は処理を中断
if (-not (Test-Path $FilePath) -and $c) {
Write-Warning "File '$FilePath' does not exist and -c option specified. Skipping."
return
}
# ファイルが存在しない場合は新規に作成
if (-not (Test-Path $FilePath)) {
New-Item -Path $FilePath -ItemType File | Out-Null
}
# -aオプションが指定された場合は最終アクセス時刻を更新
if ($a) {
(Get-Item $FilePath).LastAccessTime = Get-Date
}
# -mオプションが指定された場合は最終変更時刻を更新
if ($m) {
(Get-Item $FilePath).LastWriteTime = Get-Date
}
# -t timeオプションが指定された場合は指定した時刻を使用して更新
if ($t) {
try {
$time = [DateTime]::ParseExact($t, "yyyyMMddHHmm", $null)
(Get-Item $FilePath).LastAccessTime = $time
(Get-Item $FilePath).LastWriteTime = $time
} catch {
Write-Warning "Invalid time format for -t option. Please use 'yyyyMMddHHmm' format. Skipping."
}
}
}
# "touch" コマンドを Touch-Command 関数にエイリアス
Set-Alias -Name touch -Value Touch-Command
- 編集したps1ファイルを保存します。
- VSCodeを閉じ、PowerShellを再起動します(Windows Terminalを使っている方は、新しいタブを開いても大丈夫です)。
以上の手順で以下の4つのオプションを持つtouchコマンドが使えるようになります。
- -a: ファイルのアクセス時刻を更新する
- -c: ファイルがまだ存在していない場合はファイルを作成しない
- -m: ファイルの修正時刻を更新する
- -t: 新しいタイムスタンプを指定してファイルの時刻を更新する
Discussion