【问题标题】:Read a directory listing into Powershell, then display every other filename to the screen将目录列表读入 Powershell,然后在屏幕上显示所有其他文件名
【发布时间】:2023-03-21 02:14:01
【问题描述】:

这是我目前创建的 Powershell 脚本:

dir C:\Windows\System32 | Sort-Object -Descending 

我的最终目标是列出以下目录中的所有文件(仅文件 - 没有子目录),按文件名降序排序。接下来,我需要阅读在 Powershell 中创建的目录列表,然后将所有其他文件名显示到屏幕上。

我试图找到一种方法,方法是将排序结果通过管道传输到 Foreach-Object cmdlet,然后使用 Get-Content cmdlet 和每个对象的 FullName 属性从结果列表中读取“对象” - 如:获取内容 $_.FullName

dir C:\Windows\System32 | Sort-Object -Descending | ForEach-Object 

任何想法如何使用这些 cmdlet 实现这一点?

【问题讨论】:

  • ForEach-Object 有一个可选的开始脚本块,可用于初始化计数器,因此附加 |ForEach-Object {$i=0}{$i++;if($i%2){$_}} 以输出所有偶数条目。
  • 正是我想要的。谢谢。
  • 您甚至不需要单独的增量命令,++ 的位置决定了它是模数前还是模数后。 |ForEach-Object {$i=0}{if(++$i%2){$_}}|ForEach-Object {$i=0}{if($i++%2){$_}}

标签: powershell


【解决方案1】:

您可以使用.IndexOf() 获取数组中某个项目的索引号。您可以使用“mod 2 = zero”获取数字列表的偶数。像这样的东西......

$TargetDir = "$env:windir\system32"

$FileList = Get-ChildItem -LiteralPath $TargetDir -File |
    Sort-Object -Property Name

foreach ($FL_Item in $FileList)
    {
    # if "number mod 2 = zero", then it's an even number
    if ($FileList.IndexOf($FL_Item) % 2 -eq 0)
        {
        $FL_Item.Name
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 2014-02-12
    相关资源
    最近更新 更多