对于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闪存驱动器上,情况就不同了。
(P.S.更改文件时间戳的命令在外部USB闪存驱动器上仍然有效。)
假设我尝试更改外部USB闪存驱动器上的文件夹(而不是文件)的创建日期:
Get-Item U:\testFolder1 | % {$_.CreationTime = '01/11/2002 06:00:36'}
我收到此错误消息:
Exception setting "CreationTime": "The process cannot access the file 'U:\testFolder1' because it is being used by another process."
At line:1 char:31
+ ... et-Item U:\testFolder1 | % {$_.CreationTime = '01/11/2002 06:00:36'}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], SetValueInvocationException
+ FullyQualifiedErrorId : ExceptionWhenSetting
进一步挖掘,我意识到这个过程是Windows 10的文件资源管理器,它阻止我更改时间戳。只要我不打开文件资源管理器,我就可以使用PowerShell更改USB闪存驱动器上文件夹的创建日期。
是否有类似.Dispose()的方法来阻止Windows 10的文件资源管理器锁定文件夹,而无需每次都关闭文件资源管理器?
2条答案
按热度按时间sqxo8psd1#
请尝试以下命令。
这也适用于外部驱动器。
vojdkbi02#
我手头有一个函数,它使用SysInternals的Handle.exe来查找哪个进程对文件有锁,然后尝试杀死该进程对文件的锁。
你应该能够将你的文件通过管道传递给它,它将解锁任何有锁的文件,然后将文件对象传递给管道。