用于记录已更改内容的路径和文件名列表的脚本

时间:2014-08-04 11:04:46

标签: powershell

我想以递归方式更改各种文件夹/文件的创建日期。我设法得到一个简单的PowerShell脚本来做到这一点。但是,创建的日志文件仅在多行上显示为true,具体取决于所做的更改次数。我想要的是日志文件列出文件路径和实际更改的文件的名称。

下面是我所做的更改但没有详细日志文件的简单脚本:

Get-ChildItem -recurse G:\ | % {$_.CreationTime = '10/10/2014 15:00'}  | Out-File "c:\pslog.txt"

请帮助,因为我对powershell很新,所以代码越简单越好。

此致

标记

1 个答案:

答案 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