标题: [问题求助] [已解决]如何用Powershell修改指定文件夹的创建日期和时间 [打印本页]
作者: thp2008 时间: 2021-3-15 17:50 标题: [已解决]如何用Powershell修改指定文件夹的创建日期和时间
本帖最后由 thp2008 于 2021-3-18 22:04 编辑
我在网上,找到下面的命令:
批量修改指定目录及子目录下的所有文件及子文件夹的日期和时间
powershell.exe -command "Get-Childitem -path 'E:\test' -Recurse | foreach-object { $_.LastWriteTime = Get-Date; $_.CreationTime = Get-Date }"
这条是指定文件的,最后创建时间、修改时间、访问时间
powershell.exe -command "ls 'e:\test\abc.txt' | foreach-object { $_.CreationTime = '02/02/2020 01:01:01';$_.LastAccessTime = '11/04/2019 20:42:23';$_.LastAccessTime = '11/04/2019 20:42:23' }"
REM $_.LastWriteTime = '03/03/2020 01:01:01'; 修改时间
REM $_.CreationTime = '02/02/2020 01:01:01' }" 创建时间
REM $_.LastAccessTime = '11/04/2019 20:42:23'; 访问时间
我测试了一上,是可以将E:\test目录下,所有文件及子目录的修改日期和时间,创建日期和时间都修改成当前日期有时间,或者将Get-Date换成指定的日期和时间也行。是可以用的。没用问题。
但是我发现,命令不能对根目录test本身有效,我就想问一下,如何对根目录,或者指定的目录修改创建日期和时间。
目录好像只有创建日期和时间,没有其它的日期和时间。
感谢!
作者: WHY 时间: 2021-3-15 19:07
- PowerShell "$a=Get-Childitem -path 'E:\test' -Recurse; $b=get-Item 'E:\test'; $a+$b | foreach-object { $_.LastWriteTime = Get-Date; $_.CreationTime = Get-Date }"
复制代码
作者: thp2008 时间: 2021-3-16 11:17
回复 2# WHY
感谢您的帮助,
但是我运行了一下,报错了。
PS F:\> PowerShell "$a=Get-Childitem -path 'f:\sss' -Recurse; $b=get-Item 'f:\sss'; $a+$b | foreach-object { $_.LastWriteTime = Get-Date; $_.CreationTime = Get-Date }"
所在位置 行:1 字符: 62
+ =Get-Childitem -path 'f:\sss' -Recurse; =get-Item 'f:\sss'; + | forea ...
+ ~
一元运算符“+”后面缺少表达式。
+ CategoryInfo : ParserError: ( [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingExpressionAfterOperator
PS F:\>
作者: WHY 时间: 2021-3-16 16:25
回复 3# thp2008
复制粘贴到 CMD 命令提示符中运行。
作者: thp2008 时间: 2021-3-16 23:44
回复 4# WHY
也不行,
F:\>owerShell "$a=Get-Childitem -path 'F:\sss' -Recurse; $b=get-Item 'F:\sss'; $a+$b | foreach-object { $_.LastWriteTime = Get-Date; $_.CreationTime = Get-Date }"
设置“LastWriteTime”时发生异常:“文件“F:\sss”正由另一进程使用,因此该进程无法访问此文件。”
所在位置 行:1 字符: 90
+ ... F:\sss'; $a+$b | foreach-object { $_.LastWriteTime = Get-Date; $_.Cre ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ( [], SetValueInvocationException
+ FullyQualifiedErrorId : ExceptionWhenSetting
设置“CreationTime”时发生异常:“文件“F:\sss”正由另一进程使用,因此该进程无法访问此文件。”
所在位置 行:1 字符: 119
+ ... ch-object { $_.LastWriteTime = Get-Date; $_.CreationTime = Get-Date }
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], SetValueInvocationException
+ FullyQualifiedErrorId : ExceptionWhenSetting
作者: WHY 时间: 2021-3-17 16:04
win7 sp1 中文旗舰版,PS 版本 2.0,测试没有问题。
Windows PowerShell
版权所有 (C) 2009 Microsoft Corporation。保留所有权利。
PS C:\Users\WHY> $a = get-Item 'E:\Test'
PS C:\Users\WHY> $a.LastWriteTime = get-Date
PS C:\Users\WHY> $a.CreationTime = get-Date
PS C:\Users\WHY> dir 'E:\Test' -Recurse | forEach{ $_.LastWriteTime = get-Date; $_.CreationTime = get-Date }
作者: thp2008 时间: 2021-3-17 22:21
回复 6# WHY
不怪得,我测试了多次,都不行,我是Windowns10 64位 Microsoft Windows [版本 10.0.19042.868]
作者: WHY 时间: 2021-3-18 00:09
回复 7# thp2008
跟系统应该没有太大关系,可能是你用资源管理器打开了 E:\Test 目录,进程被占用而无法修改。把文件夹窗口关掉再试。
或者,这样试试:- (New-Object -com Shell.Application).Windows() | ?{ $_.FullName -match '\\explorer\.exe$' } | forEach{ $_.Quit() }
- get-Item 'E:\Test' | forEach{ $_.LastWriteTime = get-Date; $_.CreationTime = get-Date }
- dir 'E:\Test' -Recurse | forEach{ $_.LastWriteTime = get-Date; $_.CreationTime = get-Date }
复制代码
作者: thp2008 时间: 2021-3-18 11:01
回复 8# WHY
我按照您说的,测试了一下,发现,的确是因为我打开了资源管理器的原因,只要开着资源管理器就不行,不管有没有打开那个目录。
第一条是强制结束资源管理器,没有问题。
第二条:- get-Item 'F:\sss' | forEach{ $_.CreationTime = '02/02/2020 12:23:01';$_.LastWriteTime = '11/02/2020 12:23:01'; }
复制代码
这条代码是没问题,可以修改成功,感谢!
但是为什么现在这条代码就不能在CMD中执行了,一定要在Powershell中执行。这样的话,就跟我之前的批处理,不能一起工作,要单独执行。
能不能麻烦您,帮我改成可以在CMD中执行的命令行。我在前面加上powershell -command 也不行,会报'forEach' 不是内部或外部命令,也不是可运行的程序或批处理文件。- dir 'F:\sss' -Recurse | forEach{ $_.LastWriteTime = get-Date; $_.CreationTime = get-Date }
复制代码
这条可以执行成功,但是没有输出任何结果,应该是查看指定目录的日期时间信息。但没有任何显示。
再次表示感谢!
作者: WHY 时间: 2021-3-18 17:27
第1命令:关闭所有由 explorer 打开的窗口;
第2条命令:修改 E:\Test 目录本身的创建日期、最后修改日期;
第3条命令:修改 E:\Test 下面的文件(目录)及其子目录下面的文件(目录)的创建日期、最后修改日期。
如果需要把这三条改写成批处理 bat 的形式:- @echo off
- PowerShell "(New-Object -com Shell.Application).Windows() | ?{ $_.FullName -match '\\explorer\.exe$' } | forEach{ $_.Quit() }; get-Item 'E:\Test' | forEach{ $_.LastWriteTime = get-Date; $_.CreationTime = get-Date }; dir 'E:\Test' -Recurse | forEach{ $_.LastWriteTime = get-Date; $_.CreationTime = get-Date }"
- pause
复制代码
作者: thp2008 时间: 2021-3-18 22:04
回复 10# WHY
感谢您的帮助!解决了。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |