我想以逗号分隔的字符串形式获取目录中的所有名称,以便我可以将它们作为参数传递给 cmdlet。
如何在 Powershell 中以逗号分隔的字符串形式获取目录中的所有文件名?
一种方法是:
(dir | % { $_.basename }) -join ','
最快/最短路线:
(ls).name -join ','
对于特定文件夹路径:
(ls path\to\folder).name -join ','
这应该有效:
(ls C:\PATH\TO\FOLDER | select -expandproperty name) -join ','
如果您想避免其中有子文件夹:
(ls C:\PATH\TO\FOLDER | ?{$_.PSIsContainer -eq $false} | select -expandproperty name) -join ','
对于那些可能更喜欢经典 Windows 的人
dir
,这里有一个 Eddie 的答案的变体(它使用了 *nix-like ls
,当然 ps 也支持):
(dir -name) -join ','
这将产生与他的
ls
示例完全相同的结果。 (需要明确的是,这只能在 powershell 中工作——正如问题中所要求的——但不能在 Windows 命令行中工作。)
如果您想从结果中删除文件夹名称(在他或我的示例中),请添加 -file 开关:
(dir -file -name) -join ','
或 (ls -file).name -join ','
。
当然,您可以按照
dir
(或 ls
)指定要查找的文件模式或要查找的文件夹。这些示例只是获取当前文件夹中的所有文件。要查找 exe 的起始 j 的所有文件名,这可以工作:
(dir j*.exe -file -name) -join ','
FWIW,powershell 中的这个
dir
是 Get-ChildItem
的别名,使用 help dir
将显示它的许多其他参数/开关。