PowerShell筛选并复制指定Excel文件的技术求助
PowerShell批量筛选复制Excel文件并记录信息
完整实现脚本
直接给你能落地的脚本,方便修改参数和重复执行:
# 配置核心参数 $networkPath = "\\你的网络共享路径" $localTargetPath = "C:\本地存储文件夹" $outputLogPath = "C:\文件记录.txt" # 自动创建本地目标文件夹(不存在的话) if (-not (Test-Path $localTargetPath)) { New-Item -ItemType Directory -Path $localTargetPath | Out-Null } # 筛选文件、复制并记录信息 Get-ChildItem -Path $networkPath -Recurse -File -Include "*.xls", "*.xlsx", "*.xlsm" | Where-Object { # 过滤最后修改时间(2022年4月1日之后) $_.LastWriteTime -gt (Get-Date "2022-04-01") -and # 过滤文件名包含"2022" $_.Name -like "*2022*" } | ForEach-Object { # 复制文件到本地,-Force可覆盖同名文件(不需要就删掉) Copy-Item -Path $_.FullName -Destination $localTargetPath -Force # 整理要记录的信息 "$($_.FullName),$($_.Name),$($_.LastWriteTime)" } | Out-File -Path $outputLogPath -Encoding utf8
你的疑问逐一解答
如何及在何处过滤LastWriteTime
把时间过滤条件写在Where-Object代码块里:$_.LastWriteTime -gt (Get-Date "2022-04-01")。Get-Date会把字符串转成标准时间对象,和文件自带的LastWriteTime属性做对比,只保留修改时间晚于2022年4月1日的文件。如何及在何处过滤文件名中的“2022”
同样在Where-Object块里添加通配符匹配:$_.Name -like "*2022*"。*代表任意长度的任意字符,这个条件会匹配文件名里任何位置包含“2022”的文件。如何及在何处将文件复制到本地文件夹
在ForEach-Object代码块里执行Copy-Item命令:用$_.FullName拿到文件的完整网络路径,指定本地文件夹作为Destination。如果需要覆盖本地已有的同名文件,就加-Force参数,不需要可以直接删掉。是否需要创建脚本文件运行该流程
必须建议写脚本(后缀.ps1)运行,原因很实在:
- 处理20000个文件的流程需要稳定重复执行,脚本能避免每次命令行输入出错;
- 网络路径、本地存储位置这类参数改起来方便;
- 后续要调整筛选规则,直接改脚本就行,不用重新拼一大串命令。
运行脚本的方式:右键用PowerShell打开脚本,或者在PowerShell窗口里输入.\你的脚本文件名.ps1(注意当前路径要和脚本所在目录一致)。
内容的提问来源于stack exchange,提问作者blimbert
相关产品推荐
相关产品推荐

