我想以递归方式更改各种文件夹/文件的创建日期。我设法得到一个简单的PowerShell脚本来做到这一点。但是,创建的日志文件仅在多行上显示为true,具体取决于所做的更改次数。我想要的是日志文件列出文件路径和实际更改的文件的名称。
下面是我所做的更改但没有详细日志文件的简单脚本:
Get-ChildItem -recurse G:\ | % {$_.CreationTime = '10/10/2014 15:00'} | Out-File "c:\pslog.txt"
请帮助,因为我对powershell很新,所以代码越简单越好。
此致
标记
答案 0 :(得分:0)
执行$_.CreationTime = '10/10/2014 15:00'
时,会返回操作的状态,因此一堆True
只表示新的CreationTime分配成功
要获取文件路径,请隐藏分配并将$_.FullName
放入管道:
Get-ChildItem -recurse G:\ | % {($_.CreationTime = '10/10/2014 15:00')|Out-Null; $_.FullName } | Out-File "C:\pslog.txt"
但是,将FileName与结果一起使用可能很有用,这样您就可以评估某些文件是否未通过作业
你说你想要一些简单的代码,但紧凑的单行不等于“简单”,你可能会发现你从冗长的代码中学到了很多东西。
让我们将其分成多个语句以获得更好的概述:
# Get the files
$gFiles = Get-ChildItem -recurse G:\
# Loop through them all
$gFiles | ForEach-Object {
# Set the creation date without returning any output
($_.CreationTime = '10/10/2014 15:00') |Out-Null
# Test if the previous operation was successful:
if($?)
{
# Success, create an object containing the Path and status
New-Object PSObject -Property @{
"FilePath" = $_.FullName
"FileSize" = $_.Length
"Result" = "Success"
}
}
else
{
# Success, create an object containing the Path and status
New-Object PSObject -Property @{
"FilePath" = $_.FullName
"FileSize" = $_.Length
"Result" = "Failed"
}
}
# Export the objects containing the result to a .CSV file
} |Export-Csv -LiteralPath "C:\pslog.csv" -Delimiter ";" -NoTypeInformation -Force
现在,C:\ pslog.csv包含两个以分号分隔的列,其中包含“Result”和“FilePath”的适当标题
FileSize
属性将以字节数为单位,但您可以使用以下命令将其更改为KB或MB:
"FileSize" = $_.Length / 1KB
"FileSize" = $_.Length / 1MB