如何在 PowerShell 中执行“ dir/s/b”?

我有一个包含三个文件的文件夹,希望在 PowerShell 中使用相当于 dir /s /b的文件夹?

例如,如果文件夹名为 temp3,并且它包含三个文本文件—— a.txt.b.txtc.txt

C:\temp3> dir /s /b

给了我

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

如何在 PowerShell 中获得 一样结果?

113428 次浏览

你可以用

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参数。

不过,我给你的建议是: 如果可以的话,不要使用字符串。如果您想传递文件,那么只需获取从 Get-ChildItem获得的 FileInfo对象。Cmdlet 知道如何处理它。在对象工作得更好的情况下使用字符串只会让您遇到奇怪的问题。

加上乔伊的回答。从 PowerShell 3.0开始,您可以使用新的 Foreach-Object速记来获取 FullName属性。

Get-ChildItem -Recurse | Foreach-Object FullName
gci -r |% FullName

区别在于,如果只需要一个属性,则不需要使用大括号({})或 $_变量。

只是为了强制执行,乔伊说:

gci -r -filter *.log | % fullname

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


(dir -r *.log).FullName也可以


在 powershell 中执行一次这个命令,以启用 dirsb *.log命令:

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

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

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

cmd /r dir /s /b

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

对于许多命令来说,cmd /r比处理 Powershell 面向对象体系结构要好。

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

  1. 记事本 $profile (来自 Powershell 窗口)
  2. 当文件打开时,插入下列行并保存:

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

这相当于:

(dir -r).FullName

鲍勃答案的一个变体是使用管道实时输出(在大目录中有更好的反馈) :

dir -r | % FullName

在 PowerShell 中,查找文件的命令行是具有别名(gci、 ls、 dir)的“ Get-ChildItem”。 在“ dir-?”中,你可以找到网址解释: 获取儿童项目

命令示例:

Dir * . txt-s | select name,length

Ls * . txt-s | select fullname

“ CMD/r DIR URL/s”非常有用... ... PowerShell 不允许使用 Get-ChildItem 别名的 URL;)

如果您使用 PowerShell shell 进行交互式工作,而不是编写脚本,那么只需键入 cmd并输入。然后你可以像以前一样运行 dir /s /b。 注意命令行提示,以区分您是在 PS 或 CMD。