PowerShell脚本开发需求:路径搜索、文件重命名与复制
PowerShell脚本完善实现
以下是完全符合你需求的完善脚本,代码里加了详细注释,同时针对新手做了简化和容错处理:
# 目标文件夹路径(可根据实际修改) $DestFolder = "C:\AnotherFolder\" # -------------------------- # 1. 选择源文件夹:自动生成当日路径或手动选择 # -------------------------- Write-Host "请选择源文件夹获取方式:" Write-Host "1 - 自动使用当日日期路径(格式:C:\SearchPath\yyyyMMdd)" Write-Host "2 - 通过资源管理器手动选择源文件夹" $choice = Read-Host "请输入1或2" if ($choice -eq "1") { # 自动生成当日日期格式(yyyyMMdd) $todayDate = Get-Date -Format "yyyyMMdd" $SourceFolder = Join-Path "C:\SearchPath\" $todayDate # 检查自动生成的路径是否存在,不存在则提示 if (-not (Test-Path $SourceFolder)) { Write-Error "自动生成的路径 $SourceFolder 不存在,请确认路径或选择手动模式" exit } } elseif ($choice -eq "2") { # 调用资源管理器选择文件夹 Add-Type -AssemblyName System.Windows.Forms $folderDialog = New-Object System.Windows.Forms.FolderBrowserDialog $dialogResult = $folderDialog.ShowDialog() if ($dialogResult -eq "OK") { $SourceFolder = $folderDialog.SelectedPath } else { Write-Host "未选择文件夹,脚本退出" exit } } else { Write-Host "输入无效,脚本退出" exit } # 确认源文件夹路径 Write-Host "当前使用的源文件夹:$SourceFolder" # -------------------------- # 2. 复制Test.xmr并重命名为Test.$xmr # -------------------------- $testXmrPath = Join-Path $SourceFolder "Test.xmr" if (Test-Path $testXmrPath) { $newTestXmrPath = Join-Path $SourceFolder "Test.`$xmr" Copy-Item -Path $testXmrPath -Destination $newTestXmrPath -Force Write-Host "已完成Test.xmr复制并重命名为Test.$xmr" } else { Write-Warning "未找到Test.xmr文件,跳过此步骤" } # -------------------------- # 3. 收集指定扩展名的文件 # -------------------------- # 定义需要收集的扩展名(注意`$xmr中的`是转义符,避免$被当作变量) $targetExtensions = @("*.jpl", "*.eml", "*.html", "*.pdf", "*.cml", "*.xmr", "*`.xmr", "*.xml") # 递归获取所有符合条件的文件 $FileList = Get-ChildItem -Path $SourceFolder -Recurse -File -Include $targetExtensions if ($FileList.Count -eq 0) { Write-Warning "未找到符合条件的文件,脚本退出" exit } Write-Host "共找到 $($FileList.Count) 个符合条件的文件" # -------------------------- # 4. 将收集到的文件移动至目标文件夹 # -------------------------- # 确保目标文件夹存在,不存在则创建 if (-not (Test-Path $DestFolder)) { New-Item -Path $DestFolder -ItemType Directory | Out-Null } # 遍历移动文件 foreach ($file in $FileList) { $destFilePath = Join-Path $DestFolder $file.Name # 移动文件,-Force参数会覆盖已存在的文件(可根据需求移除) Move-Item -Path $file.FullName -Destination $destFilePath -Force Write-Host "已移动文件:$($file.Name)" } Write-Host "所有操作完成"
关键部分说明
1. 源文件夹选择
- 自动模式:通过
Get-Date -Format "yyyyMMdd"生成当日日期格式,拼接基础路径C:\SearchPath\ - 手动模式:调用Windows自带的文件夹选择对话框,新手无需手动输入路径,避免出错
- 增加了路径存在性检查,避免后续操作报错
2. 复制并重命名Test.xmr
- 用
Test-Path检查原文件是否存在,避免复制失败 - 重命名时用
`$xmr,因为PowerShell中$是变量标识符,加反引号可以表示字面量的$`
3. 文件收集优化
- 用数组一次性定义所有目标扩展名,避免多次调用
Get-ChildItem导致数组被覆盖 - 使用
-Include参数批量匹配扩展名,比多次单独调用更高效 - 保留
-Recurse递归搜索子文件夹,-File只匹配文件(排除文件夹)
4. 文件移动处理
- 先检查目标文件夹是否存在,不存在则自动创建
- 使用
Move-Item替代原脚本的Copy-Item,符合你“移动文件”的需求 -Force参数可以自动覆盖目标文件夹中已存在的同名文件,若不需要覆盖可移除该参数
内容的提问来源于stack exchange,提问作者user20774524
相关产品推荐
相关产品推荐

