Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PowerShell中执行“dir/s/b”?_Powershell - Fatal编程技术网

如何在PowerShell中执行“dir/s/b”?

如何在PowerShell中执行“dir/s/b”?,powershell,Powershell,我有一个包含三个文件的文件夹,希望在PowerShell中使用与dir/s/b等效的文件。我该怎么做 例如,如果文件夹名为temp3,并且包含三个文本文件-a.txt。b、 txt和c.txt,正在执行 给我 C:\temp3\a.txt C:\temp3\b.txt C:\temp3\c.txt 如何在PowerShell中获得相同的结果?您可以使用 Get-ChildItem -Recurse | Select-Object -ExpandProperty FullName gci -r

我有一个包含三个文件的文件夹,希望在PowerShell中使用与dir/s/b等效的文件。我该怎么做

例如,如果文件夹名为temp3,并且包含三个文本文件-a.txt。b、 txt和c.txt,正在执行

给我

C:\temp3\a.txt
C:\temp3\b.txt
C:\temp3\c.txt
如何在PowerShell中获得相同的结果?

您可以使用

Get-ChildItem -Recurse | Select-Object -ExpandProperty FullName
gci -r | select -exp FullName

第一个是长版本,第二个是使用别名和短参数名缩短的版本,如果不明显的话。在脚本中,我建议始终使用长版本,因为在某些地方冲突的可能性要小得多

重新阅读您的问题,如果您想要用dir/s/b完成的只是输出当前目录中文件的完整路径,那么您可以在这里删除-Recurse参数


不过,我给你的建议是:如果你能帮上忙,就不要使用字符串。如果要传递文件,只需获取从get ChildItem获得的FileInfo对象。cmdlet知道如何使用它。在对象工作得更好的地方使用字符串只会让你陷入奇怪的问题。

补充乔伊的答案。从PowerShell 3.0开始,您可以使用新的Foreach对象速记来获取FullName属性

Get-ChildItem -Recurse | Foreach-Object FullName
gci -r |% FullName

区别在于,如果只需要一个属性,就不需要使用大括号{}或$变量。

只是为了强制执行,Joey说:

Get-ChildItem -Recurse | Foreach-Object FullName
gci -r |% FullName
gci -r -filter *.log | % fullname
这可以查找像dir/s/b*.log这样的文件

dir-r*.log.FullName也可以工作

在powershell shell中执行此命令一次,以启用dirsb*.log命令:


或者将其添加到您的个人资料中:PS>notepad$profile

如果您将Powershell用作shell而不是脚本处理器,则只需键入:

cmd /r dir /s /b
/r标志告诉cmd.exe运行命令并退出。换句话说,您将在相同的执行上下文中结束


对于许多命令,cmd/r比处理Powershell面向对象的体系结构要好。

如果您只想用对cmd dir的调用永久替换Powershell的dir别名Get ChildItem,对于将来要打开的所有Powershell窗口,只需执行以下操作:

powershell窗口中的记事本$profile 文件打开时,插入以下行并保存:

Remove-Item alias:\dir
function dir($1, $2, $3, $4) {cmd /r dir $1 $2 $3 $4}
这相当于:

(dir -r).FullName
答案的一种变体是使用管道进行实时输出,在大目录中有更好的反馈:

dir -r | % FullName

你也可以这样做:gci-r | select-expandfullname@Johannes:它确实有用。你在用v2期末考试吗?看,嗯,不,让我感到羞耻的是,我在v1中查找了它,我是在我附近唯一一台仍然有v1的机器上。我甚至读过那篇博文,但都不记得了。你可能还想过滤Get ChildItem-Recurse | Select Object-ExpandProperty FullName |其中Object{$like*.log}@aolszowka:过滤Get ChildItem会更快,例如使用-filter*.log。此外,这不是问题的一部分。终于!避免虚假空行的唯一正确方法!这似乎是最直观的答案。我发现非常讽刺的是,在powershell中编写命令的最短方法就是返回到旧的cmd.exe。PowerShell是一个臃肿、笨重的烂摊子。DOS虽然有很多缺点,但它还是很有效的。@abelenky gci-r |%FullName似乎很短,可以说比dir更容易记住flags@abelenky+1,由臃肿引起的的附加属性-速度很慢。我从未见过/R,在cmd的选项列表中也找不到,直到我看到这个,出于兼容性原因,/X与/E:ON相同,/Y与/E:OFF相同,/R与/C相同。忽略任何其他开关。所以最好使用/C和/K。。。或cmd/c。。最后两个点是为了能够写这些东西。dir-s-n-没有文档证明-s也是递归的-n只给出了名字,但没有驱动器号,如果你能接受的话,欢迎来到如此怪异的节目;我首先要弄清楚这两面旗帜是什么。所以/s表示以递归方式列出文件,/b就是文件。
(dir -r).FullName
dir -r | % FullName