如何使用for循环列出文件?

时间:2015-06-01 11:01:57

标签: bash shell unix powershell

如何使用PowerShell执行ls

for i in `ls` 
do 
    if [ -d $i ] #miro si és directori
    then
        echo "Directory"
    else echo "File"
    fi
done

POWERSHELL

$llistat -ls
forEach $element in $llistat ??? this is possible
}

2 个答案:

答案 0 :(得分:1)

更多的PoSh方法是使用管道,也许是哈希表:

$type = @{
  $true  = 'Directory'
  $false = 'File'
}

Get-ChildItem | ForEach-Object { $type[$_.PSIsContainer] }

PowerShell甚至为alias提供了默认的Get-ChildItem ls,因此您可以使用更多的Unix- ish 语法:

ls | % { $type[$_.PSIsContainer] }

答案 1 :(得分:0)

在PowerShell中,Get-ChildItem cmdlet的工作方式与ls类似(至少与文件系统提供程序一样)。返回的所有项目都有一个名为PSIsContainer的特定于PowerShell的属性,指示它是否是目录:

foreach($item in (Get-ChildItem)){
    if($item.PSIsContainer){
        "Directory"
    } else {
        "File"
    }
}

如果你想查看每个目录中的内容,可以向下一级:

foreach($item in (Get-ChildItem)){
    if($item.PSIsContainer){
        # Directory! Let's see what's inside:
        Get-ChildItem -Path $item.FullName
    }
}

从PowerShell 3.0及更高版本开始,Get-ChildItem支持文件系统提供程序上的FileDirectory开关,因此如果您只需要目录,则可以执行以下操作:

Get-ChildItem -Directory

所以第二个例子变成了:

Get-ChildItem -Directory | Get-ChildItem

您还可以递归列出文件(如ls -R):

Get-ChildItem -Recurse