将具有今天日期的目录中的文件复制到另一个位置

时间:2019-04-16 14:11:56

标签: powershell

AD Manager Plus每小时生成一次带时间戳文件路径的报告,我想将这些文件复制到另一个位置-覆盖现有文件。然后,我将安排脚本在文件生成后每小时运行一次。不幸的是,报表被提取到的位置无法修改,并且会创建带有日期和时间戳的文件夹。

示例:

C:\ADManager Plus\audit-data\reports\16042019\DailyTrue-Up01-55-07\Real Last Logon.xls
C:\ADManager Plus\audit-data\reports\ddmmyyyy\DailyTrue-Uphh-mm-ss\Real Last Logon.xls

我认为最简单的方法是:

  • 获取“报告”文件夹中最后修改的文件夹-例如Apr162019
  • 获取Apr162019文件夹中最后修改的文件夹-例如DailyTrue-Up01-55-07
  • 过滤文件夹DailyTrue-Up01-55-07中的Real Last Logon.xls电子表格
$Path = "C:\ADManager Plus\audit-data\reports"
$DestinationPath = "\\domain\networkshare\Reports\"

Get-ChildItem -Path $Path -Directory | ForEach-Object {
    Get-ChildItem -Path "$Path\$_" -File -Filter "Real Last Logon.xlsx" |
        Sort-Object LastWriteTime -Descending |
        Select-Object -First 1 |
        Copy-Item -Force -Destination (New-Item -Force -Type Directory -Path (Join-Path $DestinationPath ($_.FullName.Replace("$Path\", ''))))
}

我们似乎拥有将所有文件夹复制到该位置的代码,无法在多个目录中查找。

我感觉到我们正在接近这个错误,有人可以建议实现此目标的最佳方法吗?网上很少有文章说明如何从时间戳文件夹中检索文件。

1 个答案:

答案 0 :(得分:0)

也许这会帮助您。 https://deskeng.blogspot.com/2019/04/copy-file-from-directories-with-todays.html

                $Script:sScriptFolder = (Get-Item $($MyInvocation.MyCommand.Path)).DirectoryName
                $Script:sSystemDrive = "$Env:SystemDrive"

                #$sVDIMSTName1 = Get-Content "c:\SWKSoftware\VDIComputers.txt"
                $sgetDateTime =  Get-Date -Format g

                $strSourcePath = "C:\Temp\Dir1\" 
                $sDestinationPath = "C:\Temp\Dir2\"

                If ((Test-Path -Path $strSourcePath) -AND (Test-Path -Path $sDestinationPath)) 
                {
                    #Copy-Item "$strSourcePath\*.*" -Destination "$destinationPath" -Force -Recurse

                    $sScrParentFolder = split-Path -path $strSourcePath -Leaf

                    #$sgetDateTime =  Get-Date -Format s

                    $sgetDateTime1 = $(get-date -f yyyyMMdd_HH-mm-ss)

                    $sDateTimeFolderName =  $sScrParentFolder + "-" + $sgetDateTime1


                    $sDestinationPath = New-Item -ItemType Directory -Path "$sDestinationPath\$sDateTimeFolderName"



                    ROBOCOPY.EXE $strSourcePath $sDestinationPath /COPYALL /B /SEC /MIR /R:0 /W:0 /NFL /NDL


                 } 
                Else 
                {
                    Write-host " Source or Destination is not reachable or does not exist..."
                }