PowerShell跨网络驱动器复制大文件遇Copy-Item报错求助
问题根因
脚本触发Path参数输入提示、传输中断的核心原因有3个:
- 语法缺失:
Where-Object筛选块和后续Copy-Item命令之间缺少管道符|,Copy-Item没有接收到前面Get-ChildItem查询返回的文件对象,无法自动获取待操作文件路径,因此弹出交互提示要求手动输入Path参数。 - 无效字符:
Copy-Item行末尾多输入了两个无意义的*符号,干扰命令正常解析。 - 逻辑偏差:脚本里写的文件大小阈值为40MB,和需求要求的50MB规则不符,也未覆盖csv格式、当日日期标识的筛选要求。
修正脚本
最小修复版(解决当前复制中断问题)
这个版本直接修复语法错误,可实现当前需要的F盘符合规则txt文件复制到O盘目标目录的需求:
Get-ChildItem -Path "F:\*" -Include *AppliedInnovations*.txt | Where-Object { $_.Length -gt 50MB } | Copy-Item -Destination "O:\Applied Innovations Database\" -Force
执行逻辑:通过管道把筛选后的文件对象直接传递给Copy-Item,命令会自动将传入的文件路径绑定到Path参数,不会再弹出参数输入提示。
全需求适配版
覆盖多格式支持、当日文件筛选、本地/网络盘双向复制/移动场景:
# 可根据实际需求修改以下配置项 $sourcePath = "F:\" $targetPath = "O:\Applied Innovations Database\" $matchKeywords = @("AppliedInnovations") # 支持配置多个文件名关键词,逗号分隔即可 $allowedExtensions = @("*.txt", "*.csv") # 支持的文件后缀 $minFileSize = 50MB # 最小文件体积阈值 $currentDateStr = Get-Date -Format "yyyyMMdd" # 自动生成当日日期标识,匹配文件名中的日期段 $operation = "Copy" # 取值为Copy时执行复制,取值为Move时执行移动操作 # 执行文件传输 Get-ChildItem -Path $sourcePath -Include $allowedExtensions -File | Where-Object { $_.Length -gt $minFileSize -and $_.Name -match ($matchKeywords -join '|') -and $_.Name.Contains($currentDateStr) } | ForEach-Object { if ($operation -eq "Copy") { Copy-Item -Path $_.FullName -Destination $targetPath -Force } else { Move-Item -Path $_.FullName -Destination $targetPath -Force } Write-Host "[$(Get-Date -Format 'HH:mm:ss')] 已完成$operation : $($_.Name)" }
网络驱动器运行注意事项
- 执行脚本前可先运行
Test-Path "O:\Applied Innovations Database\"确认目标目录可正常访问,避免因网络波动、映射断开导致传输失败。 - 不要用管理员身份运行脚本:Windows默认不共享普通用户和管理员上下文的网络驱动器映射,管理员权限打开的PowerShell会识别不到F、O盘,这是映射盘脚本运行失败的高频诱因。
- 如需配置每日定时执行,在任务计划程序中挂载任务时,选择“仅当用户登录时运行”,不要勾选“使用最高权限运行”,即可正常读取已映射的网络盘符。
内容的提问来源于stack exchange,提问作者kimjong
相关产品推荐
相关产品推荐

