我不希望ls
( Get-ChildItem
) 的输出是垂直的(一个文件一行)在 Powershell 中。我希望它是水平的(就像 Linux 中的表格一样)。在网上搜索后,我不知道该怎么做。
不起作用ls -n | Format-Table
。它仍然是垂直的。
我不是英语母语者,所以请原谅我的一些语法错误。
答案1
我不太清楚为什么你会想在 Windows 上这样做,或者期待在 Windows 上列出 Linux 文件系统。不过,这已经是你能得到的最接近的结果了,原生 Windows PowerShell 就是这样。
#Collect the path listing, split on the line feed, join with a space delimiter
(ls -n) -split "`n" -join " "
Windows 文件系统在设计上不会以这种方式列出文件,而 Windows PowerShell 的目标也不是模仿其他操作系统的文件系统。Windows 文件系统将使用其原生的单个字符串列表,这是设计使然,而不是 *NIX 中的表格视图。文件或目录也不会以颜色突出显示。
在您询问之前,不,您不能只使用 Format-Table 来实现我所展示的效果。如果您想要这种外观,那么您需要为 LS/GCI 编写自己的包装器或在 *NIX 或 OSX 上使用 PoSHv6,或者使用其他回复中提到的“ls”端口,或者如果您使用的是 Win10,请启用 WSL(Linux 上的 Bash)并使用 WSL 而不是 Win PoSH。
当然您也可以只选择文件或目录列表。
(ls -n -directory) -split "`n" -join " "
(ls -n -file) -split "`n" -join " "
您可以使用 Format-Wide cmdlet,具体取决于您使用的 PoSH 版本。
ls | Format-Wide -Column 5
但你不能做的是......
ls -n | Format-Wide -Column 5
...它将会失败,没有其他解决方法。
你必须做这样的事情......工作。
ls | Format-Wide -Column 5 -Property Name
...因为 Format-Wide cmdlet 正在执行此操作
答案2
如果您安装了适用于 Linux 的 Windows 子系统 (WSL),则可以ls
直接调用。
打字
wsl ls
实际上调用 linux ls 命令并给出与 linux 上相同的输出。
您可以更新“ls”别名,以便它始终使用 Powershell“Set-Alias”调用它。在 Powershell 配置文件 (Microsoft.PowerShell_profile.ps1) 中执行以下操作:
function ls_alias { wsl ls --color=auto -hF $args }
Set-Alias -Name ls -Value ls_alias -Option AllScope
这还允许您传递其他参数,例如显示所有文件:
ls -a
但请注意:您必须传入 Unix 样式路径,而不是 Windows 样式路径,否则将无法识别。例如,以下路径:
ls /mnt/c/tmp/my_file
但不是:
ls C:\tmp\my_file
答案3
尝试这个命令:
Get-ChildItem $args -Exclude .* | Format-Wide Name -AutoSize
并且您随时可以在 Powershell 配置文件 (Microsoft.PowerShell_profile.ps1) 中添加别名:
function l { Get-ChildItem $args -Exclude .* | Format-Wide Name -AutoSize }
或者如果您也想查看隐藏文件:
Get-ChildItem $args -Force | Format-Wide Name -AutoSize
如果您想知道这里发生了什么,这些是基本的 Powershell 命令。是和的Get-ChildItem
基本命令。获取列表并对其进行格式化。dir
ls
Format-Wide
答案4
不久前我写了一个包来实现这个功能!你可以在这里阅读安装说明:https://github.com/JRJurman/PowerLS
至于其内部工作原理,它会对目录中的文件和文件夹进行一些解析,然后使用 write-host 和一些颜色标志来生成非常漂亮的输出。请查看 repo 中的自述文件以获取示例。