我有一个包含三个文件的文件夹,希望在 PowerShell 中使用相当于 dir /s /b的文件夹?
dir /s /b
例如,如果文件夹名为 temp3,并且它包含三个文本文件—— a.txt.b.txt和 c.txt
temp3
a.txt
b.txt
c.txt
C:\temp3> dir /s /b
给了我
C:\temp3\a.txt C:\temp3\b.txt C:\temp3\c.txt
如何在 PowerShell 中获得 一样结果?
你可以用
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参数。
-Recurse
不过,我给你的建议是: 如果可以的话,不要使用字符串。如果您想传递文件,那么只需获取从 Get-ChildItem获得的 FileInfo对象。Cmdlet 知道如何处理它。在对象工作得更好的情况下使用字符串只会让您遇到奇怪的问题。
Get-ChildItem
FileInfo
加上乔伊的回答。从 PowerShell 3.0开始,您可以使用新的 Foreach-Object速记来获取 FullName属性。
Foreach-Object
FullName
Get-ChildItem -Recurse | Foreach-Object FullName gci -r |% FullName
区别在于,如果只需要一个属性,则不需要使用大括号({})或 $_变量。
{}
$_
只是为了强制执行,乔伊说:
gci -r -filter *.log | % fullname
这样可以像 dir /s/b *.log那样查找文件。
dir /s/b *.log
(dir -r *.log).FullName也可以
(dir -r *.log).FullName
在 powershell 中执行一次这个命令,以启用 dirsb *.log命令:
dirsb *.log
function global:dirsb { param ([Parameter(Mandatory=$true)][string]$fileFilter) gci -r -filter $fileFilter | % fullname }
或添加到您的个人资料: PS> notepad $profile
PS> notepad $profile
如果您使用 Powershell 作为 shell (而不是脚本处理器) ,只需键入:
cmd /r dir /s /b
/r标志告诉 cmd.exe运行命令并退出。换句话说,您将以相同的执行上下文结束。
/r
cmd.exe
对于许多命令来说,cmd /r比处理 Powershell 面向对象体系结构要好。
cmd /r
如果你只想用 cmd dir 调用永久替换 Powershell 的 dir 别名(Get-ChildItem) ,那么对于将来要打开的所有 Powershell 窗口,只需要执行以下操作:
当文件打开时,插入下列行并保存:
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。
cmd