[powerShell] 修改檔案、目錄 建立日期、修改日期、存取日期

我這小廢物的powerShell 入門

使用power shell 修改檔案  建立日期、修改日期、存取日期

檔案是同事給我的,我不確定她去哪找的,所以沒有附上來源

有一些些註解,其他不解釋

步驟如下(順序請依照1→3)

2.開CMD 輸入PowerShell 開始PS模式

3.>.\ChangeDate.ps1 -name "修改檔案" -CRdate "建立日期" -UPdate "修改日期"

  (因為我有預設,且有做處理若不key -UPdate 則修改日與建立日相同) 

1.存檔下列檔案為ChangeDate.ps1

#利用Powershell修正Windows檔案的「建立日期」、「修改日期」、「存取日期」屬性
#Use Powershell to change Windows files CreationTime, LastWriteTime(a.k.a ModifyDate), LastAccessTime date.
# -name FileName
# -date yyyy-MM-dd HH:mm:ss datetime wanna change

param (
  [string]$name = "" ,
  [string]$CRdate = "",
  [string]$UPdate = ""
)

if ([string]::IsNullOrEmpty($name))
{
  Write-Host "請指定欲變更「修改日期」的檔案名稱。";
  exit;
}


//使用相對路徑,若使用絕對路徑不需要
#$name = "$($PSScriptRoot)\$($name)";


#下方為確認欲修改的目錄是否存在
if (!([System.IO.Directory]::Exists($name)))
{

   #下方為確認欲修改的檔案是否存在,因為我要設定目錄也要設定檔案所以都留
	if (!([System.IO.File]::Exists($name)))
	{
		Write-Host "指定的檔案不存在。";
		exit;
	}
}

[DateTime]$newDate = New-Object DateTime;
if ([string]::IsNullOrEmpty($CRdate))
{
  $newDate = (Get-Date);
    Write-Host "$($CRdate)日期格式不正確。";
}
else
{
  if (!([DateTime]::TryParseExact(
    $CRdate,
    "yyyy-MM-dd HH:mm:ss",
    [System.Globalization.CultureInfo]::InvariantCulture,
    [System.Globalization.DateTimeStyles]::None,
    [ref]$newDate)
  ))
  {
    Write-Host "欲變更的CR日期格式不正確。";
    exit;
  }
}


[DateTime]$newUPDate = New-Object DateTime;
if ([string]::IsNullOrEmpty($UPdate))
{
  $newUPDate = (Get-Date);
    Write-Host "$($UPdate)日期格式不正確。";
	if (!([DateTime]::TryParseExact(
    $CRdate,
    "yyyy-MM-dd HH:mm:ss",
    [System.Globalization.CultureInfo]::InvariantCulture,
    [System.Globalization.DateTimeStyles]::None,
    [ref]$newUPDate)
  ))
  {
    Write-Host "欲變更的UP日期格式不正確。";
    exit;
  }
}
else
{
  if (!([DateTime]::TryParseExact(
    $UPdate,
    "yyyy-MM-dd HH:mm:ss",
    [System.Globalization.CultureInfo]::InvariantCulture,
    [System.Globalization.DateTimeStyles]::None,
    [ref]$newUPDate)
  ))
  {
    Write-Host "欲變更的UP日期格式不正確。";
    exit;
  }
}



#變更檔案之「修改日期」屬性
$file = Get-Item $name;
$file.CreationTime   = $newDate;  #建立日期
$file.LastWriteTime  = $newUPDate;  #修改日期
#$file.LastAccessTime = $newDate;  #存取日期
Write-Host "成功將「$($name)」之建立日期變更為「$($newDate)」。";