ファイルの作成日時、更新日時の変更

デジカメの時計の電池を入れ替えて、日時が初期化されていることを忘れて撮っていたら、全部まとめて日時がおかしくなっていたことに気づいた。そこで、フォルダ内の写真全部、プラスn時間する方法を考えた。数が多いので、ちまちまやることは不可能。ソフトはできるなら使いたくない。何をされるかわからないので。

結論から言うと、WindowsのPowerShellでできた。VBScriptでは今回の調査ではできなかった。

ソースは下記。

# 指定したフォルダ内のファイル群の、更新日時を全部変える
# yo16

# ---- 設定 ----
# フォルダ
$targetFolder = 'test'

# サブフォルダも含める
$subFolder = $TRUE;

# 加える時間
$addHours = 24;


# ---- 処理 ----
# 指定したフォルダの更新日時に時間を加える
function addHour($p_folderPath, $p_processSubFolder, $p_addHour){
	$itemList = Get-ChildItem $p_folderPath;
	foreach($item in $itemList){
		$itemPath = $p_folderPath + '\' + $item.Name;
		if($item.PSIsContainer){
			# フォルダ
			if($p_ProcessSubFolder){
				addHour $itemPath $p_processSubFolder $p_addHour
			}
			
		} else {
			# ファイル
			
			# 現在の作成日時を取得
			$curCreateTime = $item.CreationTime;
			# 時間を加算
			$addedTime = $curCreateTime.AddHours($p_addHour);
			# ファイルの作成日時を変更
			Set-ItemProperty $itemPath -Name CreationTime -Value $addedTime;
			# ファイルの更新日時を変更
			Set-ItemProperty $itemPath -Name LastWriteTime -Value $addedTime;
			
			Write-Host $item.Name $addedTime;
		}
	}
}

addHour $targetFolder $subFolder $addHours

pause

変数名や関数名が汚い?PythonやらJavaScriptやらを行き来してたらルールの統一ができなくなってきてるので気にしないでw

コードのポイントは、属性を取得する、CreationTime と、設定する Set-ItemProperty です。あとは大したことないか。

ソースはgithubに置いてあります。

この記事が気に入ったらサポートをしてみませんか?