Pet*_*ull 230 powershell powershell-2.0
我正在使用PowerShell 2.0,我想要管理某个路径的所有子目录.以下命令输出所有文件和目录,但我无法弄清楚如何过滤掉文件.
Get-ChildItem c:\mypath -Recurse
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用$_.Attributes
获取属性,但后来我不知道如何构建一个文字实例System.IO.FileAttributes
来比较它.在cmd.exe
它会
dir /b /ad /s
Run Code Online (Sandbox Code Playgroud)
xcu*_*cud 275
对于小于3.0的PowerShell版本:
FileInfo
返回的对象Get-ChildItem
具有"基础"属性PSIsContainer
.您只想选择那些项目.
Get-ChildItem -Recurse | ?{ $_.PSIsContainer }
Run Code Online (Sandbox Code Playgroud)
如果你想要目录的原始字符串名称,你可以这样做
Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName
Run Code Online (Sandbox Code Playgroud)
对于PowerShell 3.0及更高版本:
dir -Directory
Run Code Online (Sandbox Code Playgroud)
ira*_*hil 191
在PowerShell 3.0中,它更简单:
Get-ChildItem -Directory #List only directories
Get-ChildItem -File #List only files
Run Code Online (Sandbox Code Playgroud)
Sac*_*eph 50
Get-ChildItem -dir #lists only directories
Get-ChildItem -file #lists only files
Run Code Online (Sandbox Code Playgroud)
如果您喜欢别名,请使用
ls -dir #lists only directories
ls -file #lists only files
Run Code Online (Sandbox Code Playgroud)
要么
dir -dir #lists only directories
dir -file #lists only files
Run Code Online (Sandbox Code Playgroud)
要递归子目录,请添加-r
选项.
ls -dir -r #lists only directories recursively
ls -file -r #lists only files recursively
Run Code Online (Sandbox Code Playgroud)
在PowerShell 4.0,PowerShell 5.0(Windows 10)和PowerShell Core 6.0(Windows 10,Mac和Linux)上进行了测试.
Car*_*nez 21
更清洁的方法:
Get-ChildItem "<name_of_directory>" | where {$_.Attributes -match'Directory'}
Run Code Online (Sandbox Code Playgroud)
我想知道PowerShell 3.0是否有一个只返回目录的开关; 添加似乎是合乎逻辑的事情.
Mar*_*icz 12
使用:
dir -r | where { $_ -is [System.IO.DirectoryInfo] }
Run Code Online (Sandbox Code Playgroud)
这种方法需要的文字更少:
ls -r | ? {$_.mode -match "d"}
Run Code Online (Sandbox Code Playgroud)
从PowerShell v2和更新版本(k表示您开始搜索的文件夹):
Get-ChildItem $Path -attributes D -Recurse
Run Code Online (Sandbox Code Playgroud)
如果您只想要文件夹名称,而不是其他内容,请使用:
Get-ChildItem $Path -Name -attributes D -Recurse
Run Code Online (Sandbox Code Playgroud)
如果要查找特定文件夹,可以使用以下命令.在这种情况下,我正在寻找一个名为的文件夹myFolder
:
Get-ChildItem $Path -attributes D -Recurse -include "myFolder"
Run Code Online (Sandbox Code Playgroud)
接受的答案提到
Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName
Run Code Online (Sandbox Code Playgroud)
得到一个“原始字符串”。但实际上类型的对象Selected.System.IO.DirectoryInfo
将会被返回。对于原始字符串,可以使用以下内容:
Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | % { $_.FullName }
Run Code Online (Sandbox Code Playgroud)
如果该值连接到字符串,则差异很重要:
Select-Object
惊讶地foo\@{FullName=bar}
ForEach
- 运算符预期:foo\bar
归档时间: |
|
查看次数: |
432501 次 |
最近记录: |