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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:20:25