我一直在寻找一个脚本,可以递归地打印目录内所有文件和文件夹,使用反斜杠来表示文件夹:
Source code\
Source code\Base\
Source code\Base\main.c
Source code\Base\print.c
List.txt
我正在使用PowerShell 3.0,但大多数其他脚本都不能正常工作(尽管它们与我要求的内容不太一样)。
此外:我需要它是递归的。
我一直在寻找一个脚本,可以递归地打印目录内所有文件和文件夹,使用反斜杠来表示文件夹:
Source code\
Source code\Base\
Source code\Base\main.c
Source code\Base\print.c
List.txt
我正在使用PowerShell 3.0,但大多数其他脚本都不能正常工作(尽管它们与我要求的内容不太一样)。
此外:我需要它是递归的。
PSIsContainer
的属性,对于目录来说它的值为true,对于文件来说则为false。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:\\","" }
它可以像这样:
$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"
}
这个答案展示了完整的路径,就像其他答案一样,但更加简短:
ls -r | % { $_.FullName + $(if($_.PsIsContainer){'\'}) }
然而,我相信OP要求的是相对路径(即相对于当前目录),只有@C.B.的答案涉及到了这一点。因此,我们只需要添加一个substring
函数就可以实现:
ls -r | % { $_.FullName.substring($pwd.Path.length+1) + $(if($_.PsIsContainer){'\'}) }
将目录列表导出到文本文件的 PowerShell 命令:
将完整路径目录列表(包括文件和文件夹)导出到文本文件中:
ls -r | % { $_.FullName + $(if($_.PsIsContainer){'\'}) } > filelist.txt
生成相对路径目录列表(文件夹和文件)到文本文件:
ls -r | % { $_.FullName.substring($pwd.Path.length+1) + $(if($_.PsIsContainer){'\'}) } > filelist.txt
dir | % {
$p= (split-path -noqualifier $_.fullname).substring(1)
if($_.psiscontainer) {$p+'\'} else {$p}
}
不是PowerShell,但您可以在命令提示符中使用以下内容将文件递归列出到文本文件中:
dir *.* /s /b /a:-d > filelist.txt
(ls $path -r).FullName | % {if((get-item "$_").psiscontainer){"$_\"}else{$_}}
仅适用于 PS 3.0
我对提交的代码进行了改进(因为代码输出在 PowerShell 中有一个输出限制)
dir -r |% { if ($.PsIsContainer) { $.FullName + "" } else { $_.FullName } } | Out-File -FilePath c:\users\your_pc_name\desktop\OUTPUT.txt
这将把所有的文件和文件夹打印到你的桌面上的一个 txt 文件中。
额外提示:
这帮助我在搜索大量的文件数据库时很有用。
\
必须被转义!-replace
的第一个参数是一个正则表达式!! - CB.List.txt
不在源代码中),并且按照Windows资源管理器的方式进行排序,即将文件夹放在前面。 - Melab