7

我一直在尝试找到一个脚本,它可以递归地打印这样的目录中的所有文件和文件夹,其中反斜杠用于指示目录:

Source code\
Source code\Base\
Source code\Base\main.c
Source code\Base\print.c
List.txt

我正在使用 PowerShell 3.0,而我发现的大多数其他脚本都不起作用(尽管它们与我所要求的完全不同)。

另外:我需要它是递归的。

4

8 回答 8

14

您可能正在寻找有助于区分文件和文件夹的东西。幸运的是,有一个属性调用PSIsContainer对文件夹为真,对文件为假。

dir -r  | % { if ($_.PsIsContainer) { $_.FullName + "\" } else { $_.FullName } }

C:\Source code\Base\
C:\Source code\List.txt
C:\Source code\Base\main.c
C:\Source code\Base\print.c

如果不需要前导路径信息,您可以使用以下方法轻松删除它 -replace

dir | % { $_.FullName -replace "C:\\","" }

希望这能让你朝着正确的方向前进。

于 2013-03-01T20:02:49.043 回答
4

它可能是这样的:

$path = "c:\Source code"
DIR $path -Recurse | % { 
    $_.fullname -replace [regex]::escape($path), (split-path $path -leaf)
}

遵循@Goyuix 的想法:

$path = "c:\source code"
DIR $path -Recurse | % {
    $d = "\"
    $o = $_.fullname -replace [regex]::escape($path), (split-path $path -leaf)
    if ( -not $_.psiscontainer) {
        $d = [string]::Empty 
    }
    "$o$d"
}
于 2013-03-01T19:45:26.100 回答
3
dir | % {
   $p= (split-path -noqualifier $_.fullname).substring(1)
   if($_.psiscontainer) {$p+'\'} else {$p}
}
于 2013-03-01T21:25:23.227 回答
3

这个显示了完整的路径,就像其他一些答案一样,但更短:

ls -r | % { $_.FullName + $(if($_.PsIsContainer){'\'}) }

但是,我认为 OP 要求提供相对路径(即相对于当前目录),只有@CB 的回答解决了这一点。因此,只需添加 asubstring我们就有了:

ls -r | % { $_.FullName.substring($pwd.Path.length+1) + $(if($_.PsIsContainer){'\'}) }
于 2013-03-28T16:48:30.990 回答
1

将目录列表转换为 Txt 文件的 PowerShell 命令:

对于文本文件的完整路径目录列表(文件夹和文件):

ls -r | % { $_.FullName + $(if($_.PsIsContainer){'\'}) } > filelist.txt

对于文本文件的相对路径目录列表(文件夹和文件):

ls -r | % { $_.FullName.substring($pwd.Path.length+1) + $(if($_.PsIsContainer){'\'}) } > filelist.txt
于 2017-08-23T09:35:11.090 回答
1

不是powershell,但您可以在命令提示符下使用以下命令将文件递归地列出到文本文件中:

dir *.* /s /b /a:-d > filelist.txt
于 2016-11-16T02:17:20.513 回答
0
(ls $path -r).FullName | % {if((get-item "$_").psiscontainer){"$_\"}else{$_}}

仅在 PS 3.0 中使用

于 2013-03-01T21:33:12.847 回答
0

您可以通过 PowerShell 中的 get-childitem 命令实现此目的。请参考以下语法:

Get-ChildItem "文件夹名称或路径" -Recurse | 选择全名 > list.txt

这将帮助您将所有普通文件和文件夹名称递归地写入一个名为 list.txt 的文件中。有关详细信息,请参阅此内容。https://ss64.com/ps/get-childitem.html

回答晚了,但它可能会帮助别人!

于 2021-12-08T03:01:36.460 回答