You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让PowerShell脚本无需手动改路径递归复制指定文件?

解决方案

如果你想自动递归遍历目标根路径下的所有层级文件夹(不用手动修改路径指定子文件夹),直接调整路径参数即可,之前的错误是因为用错了路径写法,具体修正和说明如下:

1. 遍历D盘所有层级文件夹的脚本

如果要覆盖D盘根目录下的所有文件夹及子文件夹,直接把路径设为D:\即可,-Recurse参数会自动递归所有子层级:

Get-ChildItem -Recurse -File -LiteralPath D:\ | Where-Object { $_.Name -match '^\d{4}' } | Copy-Item -Destination D:\transferTo\

2. 仅遍历指定父文件夹的所有子层级

如果你原本只需要遍历D:\Test及其所有子文件夹(比如Test1、Test1下的子文件夹等),你之前的脚本其实已经实现了这个功能——-Recurse参数会自动遍历D:\Test下的所有层级子文件夹,根本不需要手动修改路径去指定D:\Test\Test1这类子路径。

为什么D:*.*会报错?

-LiteralPath参数要求输入字面量路径,不能包含通配符,而*.*是通配符(用来匹配文件名),所以会触发错误。如果非要用通配符匹配路径,应该改用-Path参数,但在这里完全没必要,直接指定根目录或目标父目录就足够。

实用补充

  • 怕复制重复或误操作?可以给Copy-Item加-WhatIf参数先预览执行效果,确认后再去掉该参数:
    Get-ChildItem -Recurse -File -LiteralPath D:\ | Where-Object { $_.Name -match '^\d{4}' } | Copy-Item -Destination D:\transferTo\ -WhatIf
    
  • 需要排除特定文件夹?可以在Where-Object里加过滤条件,比如排除名为Temp的文件夹:
    Get-ChildItem -Recurse -File -LiteralPath D:\ | Where-Object { $_.Name -match '^\d{4}' -and $_.DirectoryName -notmatch '\\Temp\\' } | Copy-Item -Destination D:\transferTo\
    

内容的提问来源于stack exchange,提问作者cool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:48:12