【问题标题】:directory foreach extension powershell目录 foreach 扩展 powershell
【发布时间】:2017-04-09 23:46:32
【问题描述】:

我需要检查一个文件夹并制作一个包含所有不同扩展名的数组 (这部分很顺利)

$dir = dir C:\Users\seppe\Desktop\School\Scripting\Lab06\scripting_Lab06_opdr3 | Group-Object -property extension | Format-Table -Property Name

现在问题来了:使用这个数组,我需要创建一个 foreach 来创建不同的文件夹。文件夹名称需要是不同类型的文件(例如:doc。我有这个:

foreach($_ in $dir ){
mkdir C:\Users\seppe\Desktop\School\Scripting\Lab06\scripting_Lab06_opdr3\$_
}

但我得到了 5 个(在我的情况下,我只需要 3 个(因为文件夹中有 3 种类型的文档))文件夹,但名称如下:

Microsoft.PowerShell.Commands.Internal.Format.FormatEndData
Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
Microsoft.PowerShell.Commands.Internal.Format.GroupEndData
Microsoft.PowerShell.Commands.Internal.Format.GroupStartData

【问题讨论】:

    标签: powershell foreach directory


    【解决方案1】:

    由于总有几种 powershell 方式:

    cd "C:\Users\seppe\Desktop\School\Scripting\Lab06\scripting_Lab06_opdr3\"
    $Extensions = (dir . -file | %{$_.Extension} | Sort -unique).Trimstart(".")
    $Extensions | %{If (!(Test-Path $_)){MD $_}}
    

    【讨论】:

    • 这确实更准确一点,因为现在我有一个 dir PNG 而不是 .PNG
    【解决方案2】:

    您需要在创建文件夹时指定 $_ 对象的 Name 属性(因为它包含扩展名)

    mkdir C:\Users\seppe\Desktop\School\Scripting\Lab06\scripting_Lab06_opdr3\$_.Name
    

    或者在创建数组时只选择扩展名:

    $dir = Get-ChildItem C:\Users\seppe\Desktop\School\Scripting\Lab06\scripting_Lab06_opdr3 | Select-Object -ExpandProperty Extension
    

    【讨论】:

    • 然后我得到相同的输出,但最后是 .name
    • 改为$($_.Name),或尝试我添加的第二个选项。
    • 感谢您发现问题,当我做一个组对象时,它就不再起作用了!所以我会收到重复名称的错误,但它会起作用谢谢!
    • Group-Object 不会删除重复项,但 Select-Object 可以 - 这是我的更新添加到我的答案中的内容。
    猜你喜欢
    • 1970-01-01
    • 2018-12-24
    • 2016-03-12
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2018-10-31
    • 1970-01-01
    相关资源
    最近更新 更多