Powershell列出Excel文件并复制

0x6upsns  于 2023-01-13  发布在  Shell
关注(0)|答案(1)|浏览(125)

我为这篇文章的幼稚道歉,请原谅我的新。
我有大约20,000个网络文件要过滤,并将某些文件复制到本地驱动器。
文件列表要求:

  • 各种类型的Excel文件(.xls、.xlsx、.xlsm)
  • 仅限2022年4月1日之后修改的文件
  • 仅限文件名中包含“2022”的文件

如果文件符合这些要求,则:

  • 将文件复制到本地文件夹(原始文件夹路径结构无关紧要,所有文件都可以放在一个文件夹中)
  • 将原始路径和文件名沿着lastwritedate输出到txt文件

我创建了以下代码,它成功地获取了所有excel文件并创建了文件名列表

Get-ChildItem "D:\network_folder\" -Filter *.xls -Recurse | Select-Object -Property FullName, LastWriteTime |
    Export-Csv -Path "C:\local_folder\file_list.csv" -Force -NoTypeInformation

但我无法解决以下问题:

  • 如何以及在何处筛选最后写入时间
  • 如何以及在何处过滤名称中的“2022
  • 将文件复制到本地文件夹的方式和位置
  • 现在我只是把这些都放在命令行中,我需要创建一些文件来运行这个过程吗?

感谢您提供的任何帮助!

vsmadaxz

vsmadaxz1#

我猜你想要这样的东西。它在源文件夹中搜索文件名为2022,扩展名为.xls(或xls之后的任何东西)的文件。
然后循环遍历这些项目,在目标文件夹中找到这些项目的位置创建子文件夹结构,复制文件,最后写出包含原始文件信息的CSV文件。

$sourcePath  = 'D:\network_folder'
$destination = 'D:\dest_folder'
$refDate     = [datetime]::new(2022,4,2)  # --> next day date as of midnight

Get-ChildItem -Path $sourcePath -Filter '*2022*.xls*' -File -Recurse |
    Where-Object {$_.LastWriteTime -ge $refDate} | ForEach-Object {
        # create the destination folder if it does not already exist
        $target = Join-Path -Path $destination -ChildPath $_.DirectoryName.Substring($sourcePath.Length)
        $null = New-Item -Path $target -ItemType Directory -Force
        # copy the file
        $_ | Copy-Item -Destination $target
        # output the wanted properties from the original file
        $_ | Select-Object Name, FullName, LastWriteTime
    } | Export-Csv -Path "C:\local_folder\file_list.csv" -Force -NoTypeInformation

相关问题