Powershell 将文件名复制为文件夹,插入文件

Powershell 将文件名复制为文件夹,插入文件,powershell,Powershell,我正在尝试使用Powershell来 扫描文件夹D://Mediafolder以查找媒体文件的名称 为扫描的每个媒体文件创建一个同名文件夹 将每个媒体文件插入到匹配的文件夹名称中 我找不到这方面的文档或线索,而且我在Linux方面比Windows更流利。我曾多次尝试将其拼凑在一起,但都无济于事。希望这能有所帮助:) 这将为每个同名文件创建一个文件夹,因此如果您有一个名为xyz.txt的文件,它将创建一个名为xyz的文件夹,并将该文件移动到此文件夹 $path = "D:\MediaFolder"

我正在尝试使用Powershell来

  • 扫描文件夹D://Mediafolder以查找媒体文件的名称

  • 为扫描的每个媒体文件创建一个同名文件夹

  • 将每个媒体文件插入到匹配的文件夹名称中

  • 我找不到这方面的文档或线索,而且我在Linux方面比Windows更流利。我曾多次尝试将其拼凑在一起,但都无济于事。

    希望这能有所帮助:) 这将为每个同名文件创建一个文件夹,因此如果您有一个名为xyz.txt的文件,它将创建一个名为xyz的文件夹,并将该文件移动到此文件夹

    $path = "D:\MediaFolder"
    $items = Get-ChildItem $path 
    Foreach ($item in $items)
    {
        $folderName = $item.name.Split('.')[0]
        New-Item "$path\$folderName" -ItemType Directory
        Move-Item -Path "$path\$item" -Destination "$path\$foldername"
    }
    

    基于扩展名的文件排序应完成以下工作:

    $folder_path = read-host "Enter the  folder path without space"
    $file = gci $folder_path -Recurse | ? {-not $_.psiscontainer} 
    $file | group -property extension | % {if(!(test-path(join-path $folder_path -child $_.name.replace('.','')))){new-item -type directory $(join-path $folder_path -child $_.name.replace('.','')).toupper()}}
    $file | % {  move-item $_.fullname -destination $(join-path $folder_path -child $_.extension.replace(".",""))}
    $a = Get-ChildItem $folder_path -recurse | Where-Object {$_.PSIsContainer -eq $True}
    $a | Where-Object {$_.GetFiles().Count -eq 0} | Remove-Item -Force
    

    这将遍历media_目录中的文件,并将那些具有media_类型中扩展名的文件移动到具有相同基本名称的文件夹中。当您确信文件将被移动到正确的目录时,请从
    移动项
    语句中删除
    -WhatIf

    PS C:\src\t> type .\ms.ps1
    $media_dir = 'C:\src\t\media'
    $new_dir = 'C:\src\t\newmedia'
    $media_types = @('.mp3', '.mp4', '.jpeg')
    
    Get-ChildItem -Path $media_dir |
        ForEach-Object {
            $base_name = $_.BaseName
    
            if ($media_types -contains $_.Extension) {
                if (-not (Test-Path $new_dir\$base_name)) {
                    New-Item -Path $new_dir\$base_name -ItemType Directory | Out-Null
                }
                Move-Item $_.FullName $new_dir\$base_name -WhatIf
            }
        }
    

    Get ChildItem
    ls
    的对应项,
    newitem-Type目录
    mkdir
    的对应项<代码>复制项目/
    移动项目
    cp
    /
    mv
    的对应项。更新你的问题,尝试使用它们,以及你被卡住的地方。如果文件夹有1个txt文件,那么它也会为相同的文件创建一个文件夹。假设我有一个文件夹xml.txt,那么
    $item.name.Trim('.')[0]
    将返回我X。因此它将创建一个名为X的文件夹。我相信验证必须存在,如果我有一个空的文件夹结构呢?我们还必须通过检查pscontainer来删除它。:)我只是在敦促您优化它。:)我想你没有正确理解这个问题:)你可以像
    gci-include*.mp3
    一样过滤get childitem中的所有扩展名。
    -include
    参数仅在使用
    -Recurse
    开关时使用。OP没有提到递归。@lit:这不是必需的。您也可以单独使用-include。尝试此操作并查看结果
    Get ChildItem C:\windows\system32\*-Include*.dll
    我不知道您的意思。如果我不想递归进入所有文件夹,那么显然我只会使用通配符。无论如何