我如何在PowerShell中执行'dir / s / b'?

时间:2009-09-25 21:25:44

标签: powershell

我有一个包含三个文件的文件夹,并希望在PowerShell中等效dir /s /b。我该怎么做?

例如,如果文件夹名称为temp3,并且它包含三个文本文件 - a.txtb.txtc.txt,正在做

C:\temp3> dir /s /b

给了我

C:\temp3\a.txt
C:\temp3\b.txt
C:\temp3\c.txt

如何在PowerShell中获得相同的结果?

6 个答案:

答案 0 :(得分:28)

如果您使用Powershell作为shell(而不是脚本处理器),只需键入:

cmd /r dir /s /b

/r标志告诉cmd.exe运行命令并退出。换句话说,您将以相同的执行上下文结束。

对于许多命令,cmd /r优于处理Powershell面向对象的体系结构。

答案 1 :(得分:27)

您可以使用

Get-ChildItem -Recurse | Select-Object -ExpandProperty FullName
gci -r | select -exp FullName

Get-ChildItem -Recurse | ForEach-Object { $_.FullName }
gci -r | % { $_.FullName }
gci -r | % FullName    # In recent PowerShell versions

(长版本是第一个,缩短使用别名和短参数名称是第二个,如果它不明显。在脚本中我建议使用长版本,因为它不太可能在某个地方发生冲突。 )

重新阅读您的问题,如果要使用dir /s /b完成所有操作,则输出当前目录中文件的完整路径,则可以在此处删除-Recurse参数。

我给你的建议是:当你可以提供帮助时,不要使用字符串。如果您想传递文件,只需从FileInfo获取Get-ChildItem对象。 cmdlet知道如何处理它。将字符串用于对象更好地工作的东西只会让你陷入奇怪的问题。

答案 2 :(得分:5)

只是强制执行,乔伊说:

gci -r -filter *.log | % fullname

这可以找到像dir /s/b *.log这样的文件。

(dir -r *.log).FullName同样适用

在您的powershell shell中执行一次,以启用dirsb *.log命令:

function global:dirsb {
    param ([Parameter(Mandatory=$true)][string]$fileFilter)
    gci -r -filter $fileFilter | % fullname
}

或将其添加到您的个人资料中:PS> notepad $profile

答案 3 :(得分:2)

如果您只是想通过调用cmd dir永久替换Powershell的dir别名(Get-ChildItem),那么对于将要打开的所有未来PowerShell窗口,只需执行以下操作:

  1. notepad $ profile(来自powershell窗口)
  2. 文件打开时,插入以下行并保存:

    Remove-Item alias:\dir
    function dir($1, $2, $3, $4) {cmd /r dir $1 $2 $3 $4}
    

答案 4 :(得分:0)

这等效于:

(dir -r).FullName

答案 5 :(得分:0)

Bob答案的一种变化是使用管道进行实时输出(在大型目录中具有更好的反馈):

dir -r | % FullName