Powershell 将文件名复制为文件夹,插入文件
我正在尝试使用Powershell来Powershell 将文件名复制为文件夹,插入文件,powershell,Powershell,我正在尝试使用Powershell来 扫描文件夹D://Mediafolder以查找媒体文件的名称 为扫描的每个媒体文件创建一个同名文件夹 将每个媒体文件插入到匹配的文件夹名称中 我找不到这方面的文档或线索,而且我在Linux方面比Windows更流利。我曾多次尝试将其拼凑在一起,但都无济于事。希望这能有所帮助:) 这将为每个同名文件创建一个文件夹,因此如果您有一个名为xyz.txt的文件,它将创建一个名为xyz的文件夹,并将该文件移动到此文件夹 $path = "D:\MediaFolder"
$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
我不知道您的意思。如果我不想递归进入所有文件夹,那么显然我只会使用通配符。无论如何