PowerShell:更改一个文件夹或文件的时间戳(创建日期)



对于Windows 10上的PowerShell命令,我遇到了一个奇怪的行为。

要更改文件的创建日期,使用:

Get-ChildItem  C:testFile1.txt | % {$_.CreationTime = '01/11/2005 06:00:36'}

要更改文件夹的创建日期,我使用:

Get-Item  C:testFolder1 | % {$_.CreationTime = '01/11/2004 22:13:36'}

这两个命令通常在系统分区C:或桌面上运行良好。

如果文件夹存在外部USB闪存驱动器上,情况就不同了。

(注:

更改文件时间戳的命令在外部USB闪存驱动器上仍然有效。

假设我尝试更改外部USB闪存驱动器上创建的文件夹(不是文件)的日期:

Get-Item  U:testFolder1 | % {$_.CreationTime = '01/11/2002 06:00:36'}

我得到这个错误信息:

<>之前异常设置"CreationTime": "进程无法访问文件'U:testFolder1',因为它正在被另一个进程使用。"在line:1 char:31+……et-Item U:testFolder1 | %{$_。CreationTime = '01/11/2002 06:00:36'}+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo: NotSpecified:(:) [], SetValueInvocationException+ fulllyqualifiederrid: ExceptionWhenSetting之前

进一步挖掘,我意识到这个过程是Windows 10的文件资源管理器,它阻止我更改时间戳。只要我不打开文件资源管理器,我就可以使用PowerShell来更改USB闪存驱动器上文件夹创建的日期。

是否有像。dispose()这样的方法来阻止Windows 10的文件资源管理器锁定文件夹,而不需要每次都关闭文件资源管理器?

请尝试以下命令。

这也适用于外部驱动器。

(Get-Item  "U:testFolder1").LastWriteTime = '01/11/2002 06:00:36'

我有一个函数,我保持在手上,使用Handle.exe从SysInternals找到什么进程有一个锁在文件上,然后试图杀死该进程的锁在文件上。

Function Close-LockedFile{
Param(
    [Parameter(Mandatory=$true,ValueFromPipeline=$true)][Object[]]$InputFile
)
Begin{
    $HandleApp = 'C:localbinHandle.exe'
    If(!(Test-Path $HandleApp)){Write-Host "Handle.exe not found at $HandleApp`nPlease download it from www.sysinternals.com and save it in the afore mentioned location.";break}
}
Process{
    $HandleOut = Invoke-Expression ($HandleApp+' '+$InputFile.Fullname)
    $Locks = $HandleOut |?{$_ -match "(.+?)s+pid: (d+?)s+type: Files+(w+?): (.+)s*$"}|%{
        [PSCustomObject]@{
            'AppName' = $Matches[1]
            'PID' = $Matches[2]
            'FileHandle' = $Matches[3]
            'FilePath' = $Matches[4]
        }
    }
    ForEach($Lock in $Locks){
        Invoke-Expression ($HandleApp + " -p " + $Lock.PID + " -c " + $Lock.FileHandle + " -y") | Out-Null
    }
    $InputFile
}
}

你应该能够将你的文件管道到它,它将解锁任何有锁的文件,然后将文件对象传递到管道

如果powershell在受限模式下运行,像

$file.LastWriteTime = (Get-Date) 

使用

将失败
Property setting is supported only on core types in this language mode.

这工作。

Set-ItemProperty -Path $file -Name LastWriteTime -Value (Get-Date)

相关内容

  • 没有找到相关文章

最新更新