35 powershell
我有一个包含三个文件的文件夹,并希望dir /s /b在PowerShell中具有相同的功能.我怎么做?
例如,如果文件夹名称是temp3,它包含三个文本文件 - a.txt.b.txt和c.txt,做
C:\temp3> dir /s /b
Run Code Online (Sandbox Code Playgroud)
给我
C:\temp3\a.txt
C:\temp3\b.txt
C:\temp3\c.txt
Run Code Online (Sandbox Code Playgroud)
如何在PowerShell中获得相同的结果?
Joe*_*oey 32
您可以使用
Get-ChildItem -Recurse | Select-Object -ExpandProperty FullName
gci -r | select -exp FullName
Run Code Online (Sandbox Code Playgroud)
要么
Get-ChildItem -Recurse | ForEach-Object { $_.FullName }
gci -r | % { $_.FullName }
gci -r | % FullName # In recent PowerShell versions
Run Code Online (Sandbox Code Playgroud)
(长版本是第一个版本,使用别名缩短的版本和短参数名称是第二个,如果它不明显.在脚本中我建议使用长版本,因为它不太可能在某处发生冲突.)
重新阅读你的问题,如果你想要完成的dir /s /b只是输出当前目录中文件的完整路径,那么你可以在-Recurse这里删除参数.
不过我给你的建议是:当你可以帮助时,不要使用字符串.如果你想传递文件,那么只需要FileInfo获取你得到的对象Get-ChildItem.cmdlet知道如何处理它.使用字符串来处理对象更好的工作只会让你陷入奇怪的问题.
fer*_*olo 32
如果您使用Powershell作为shell(而不是脚本处理器),您只需键入:
cmd /r dir /s /b
Run Code Online (Sandbox Code Playgroud)
该/r标志告诉cmd.exe运行该命令并退出.换句话说,您将以相同的执行上下文结束.
对于许多命令,cmd /r优于处理Powershell面向对象的体系结构.
cbu*_*art 11
Bob答案的一个变体是使用管道进行实时输出(在大型目录中具有更好的反馈):
dir -r | % FullName
Run Code Online (Sandbox Code Playgroud)
添加到乔伊的答案。从PowerShell 3.0开始,您可以使用新的Foreach-Object缩写来获取FullName属性。
Get-ChildItem -Recurse | Foreach-Object FullName
gci -r |% FullName
Run Code Online (Sandbox Code Playgroud)
不同之处在于,如果您只需要一个属性,则无需使用花括号({})或$_变量。
只是为了执行,乔伊说了什么:
gci -r -filter *.log | % fullname
Run Code Online (Sandbox Code Playgroud)
这样可以像查找文件一样查找文件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
}
Run Code Online (Sandbox Code Playgroud)
或将其添加到您的个人资料: PS> notepad $profile
如果您只想通过调用 cmd dir 来永久替换 Powershell 的目录别名 (Get-ChildItem),则对于您要打开的所有未来 Powershell 窗口,只需执行以下操作:
文件打开时,插入以下行并保存:
Remove-Item alias:\dir
function dir($1, $2, $3, $4) {cmd /r dir $1 $2 $3 $4}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
59334 次 |
| 最近记录: |