基于文件名将文件移动到文件夹的PowerShell脚本?

基于文件名将文件移动到文件夹的PowerShell脚本?,powershell,Powershell,我有一个文件夹c:\test和文件: Raport-en-us-Country1.xlsx Raport-en-us-Country2.xlsx Raport-en-us-Country3.xlsx 等等 我想 基于文件名的最后一部分创建文件夹 将文件移动到新文件夹 如果文件已存在,则应覆盖旧文件 示例:c:\test\Raport-en-us-Country1.xlsx应转到c:\test\Country1\Raport-en-us-Country1.xlsx 有人能帮我创建一个Power

我有一个文件夹c:\test和文件:

  • Raport-en-us-Country1.xlsx
  • Raport-en-us-Country2.xlsx
  • Raport-en-us-Country3.xlsx
等等

我想

  • 基于文件名的最后一部分创建文件夹

  • 将文件移动到新文件夹

  • 如果文件已存在,则应覆盖旧文件

  • 示例:
    c:\test\Raport-en-us-Country1.xlsx
    应转到
    c:\test\Country1\Raport-en-us-Country1.xlsx

    有人能帮我创建一个PowerShell脚本吗

    我有以下代码,它创建文件夹,但不移动文件:

    # 1. Get a list of files in the c:\test folder
    $FileList = Get-ChildItem -Path c:\test;
    
    # 2. Parse file names, create folder structure, and move files
    foreach ($File in $FileList) {
        $File.Name -match '(?<folder>.*?)(?:-)(?<subfolder>\w{2})(?:-)(?<filename>.*)';
        if ($matches) {
            $Destination = 'c:\test\{0}\{1}\{2}' -f $matches.folder, $matches.subfolder, $matches.filename;
            mkdir -Path (Split-Path -Path $Destination -Parent) -ErrorAction SilentlyContinue;
            Move-Item -Path $File.FullName -Destination $Destination -WhatIf;
        }
        $matches = $null
    }
    
    #1。获取c:\test文件夹中的文件列表
    $FileList=Get ChildItem-Path c:\test;
    # 2. 解析文件名、创建文件夹结构和移动文件
    foreach($FileList中的文件){
    $File.Name-match'(?*?(:-)(?\w{2})(?:-)(?*);
    如果($匹配){
    $Destination='c:\test\{0}\{1}\{2}'-f$matches.folder、$matches.subfolder、$matches.filename;
    mkdir-路径(分割路径-路径$Destination-父级)-错误操作SilentlyContinue;
    移动项目-Path$File.FullName-Destination$Destination-WhatIf;
    }
    $matches=$null
    }
    
    拆分
    -
    上的
    .BaseName
    ,取最后一部分,用该名称创建一个目录,然后移动文件。这涵盖了这个概念。[grin]////由于这不是一项代码编写服务,而是一个“帮助修复我的代码”网站,因此您需要显示您的代码以及哪些代码不起作用,或者转到类似SuperUser的网站,让他人为您编写代码。是否删除
    -WhatIf
    开关?