Windows下PowerShell批量复制文件并按文件夹名规则重命名求助
PowerShell批量复制重命名脚本实现
核心脚本代码
# 定义源文件与目标根目录路径 $sourceFile = "T:\Tests2022\testscript.txt" $rootDir = "T:\Tests2022" # 遍历符合命名规则的子文件夹并处理 Get-ChildItem -Path $rootDir -Directory | Where-Object { # 匹配「firstname lastname_xxxxxxx_」格式,捕获名字前缀部分 $_.Name -match '^([A-Za-z]+ [A-Za-z]+)_\d+_$' } | ForEach-Object { $namePrefix = $matches[1] $destFileName = "$namePrefix`_testscript.txt" $destPath = Join-Path -Path $_.FullName -ChildPath $destFileName # 复制并覆盖已有文件(无需覆盖可移除-Force参数) Copy-Item -Path $sourceFile -Destination $destPath -Force Write-Host "已完成:$destPath" }
脚本关键说明
Get-ChildItem -Directory:仅遍历根目录下的子文件夹,排除文件- 正则表达式
^([A-Za-z]+ [A-Za-z]+)_\d+_$:精准匹配文件夹命名规则,通过捕获组提取firstname lastname前缀 -Force:强制覆盖目标文件夹中已存在的同名文件,根据实际需求选择是否保留
每两周自动化执行方案
方案1:Windows任务计划程序(可视化操作)
- 将上述脚本保存为
CopyTestScript.ps1,例如存放在T:\Scripts目录 - 打开「任务计划程序」,点击「创建基本任务」
- 设置任务名称(如「批量复制测试脚本」),点击下一步
- 触发器选择「每周」,设置每2周执行一次,指定执行时间(比如每周五凌晨2点),点击下一步
- 操作选择「启动程序」,程序/脚本输入
powershell.exe,添加参数:
(-ExecutionPolicy Bypass -File "T:\Scripts\CopyTestScript.ps1"-ExecutionPolicy Bypass用于绕过PowerShell脚本执行限制,确保脚本正常运行) - 完成任务创建后,可右键任务选择「运行」测试执行效果
方案2:PowerShell命令创建定时任务(代码式操作)
如果偏好用PowerShell直接创建任务,执行以下命令:
# 创建任务动作 $taskAction = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-ExecutionPolicy Bypass -File "T:\Scripts\CopyTestScript.ps1"' # 创建每两周周五凌晨2点执行的触发器 $taskTrigger = New-ScheduledTaskTrigger -Weekly -WeeksInterval 2 -DaysOfWeek Friday -At 2:00AM # 注册定时任务 Register-ScheduledTask -TaskName "批量复制测试脚本" -Action $taskAction -Trigger $taskTrigger -Description "每两周自动复制testscript.txt到指定子文件夹并重命名"
内容的提问来源于stack exchange,提问作者WmArcher
相关产品推荐
相关产品推荐

