非开发人员求助:PowerShell获取指定文件属性遇路径过长问题
嗨,我来帮你搞定这个PowerShell的需求!针对你遇到的路径过长和输出格式不对的问题,咱们一步步来解决:
1. 先解决长路径问题
Windows默认限制路径长度为260字符,咱们可以通过\\?\前缀绕过这个限制——它会告诉Windows API直接处理完整路径,忽略长度限制。如果你用的是PowerShell 7及以上版本,原生就支持长路径,连这个前缀都不用加~
2. 生成你要的目标格式
你想要的输出是-a---- 9/9/2019 9:39AM folder1/folder2/Filename.txt,核心是要把Mode、格式化的最后修改时间、相对路径(斜杠分隔)拼接起来。直接用下面的脚本就能实现:
# 第一步:设置你要扫描的根文件夹路径 $rootFolder = "C:\Your\Target\Folder" # 第二步:获取所有文件(包含长路径) $allFiles = Get-ChildItem -Path "\\?\$rootFolder" -Recurse -Force -File # 第三步:遍历文件,生成目标格式 $allFiles | ForEach-Object { # 计算相对路径,把反斜杠换成斜杠 $relativePath = $_.FullName.Substring($rootFolder.Length + 1) -replace "\\", "/" # 格式化最后修改时间为你要的样式 $formattedTime = $_.LastWriteTime.ToString("M/d/yyyy hh:mmtt") # 拼接成最终字符串 "$($_.Mode) $formattedTime $relativePath" } | Out-File -FilePath "FullFileName.txt" -Encoding UTF8
脚本细节解释
-File参数:只获取文件,如果需要包含文件夹,去掉这个参数或者改成-File -Directory- 相对路径计算:通过
Substring去掉根文件夹的前缀,再用-replace把Windows的反斜杠换成你要的斜杠 - 时间格式化:
"M/d/yyyy hh:mmtt"会生成类似9/9/2019 09:39AM的格式,如果你想要带前导零的日期(比如09/09/2019),把M/d改成MM/dd就行
为什么之前的脚本没生效?
你之前的脚本要么没有处理相对路径(直接用了FullName绝对路径),要么没有统一格式化时间和拼接格式,而且没解决长路径的限制问题,所以才得不到想要的结果~
内容的提问来源于stack exchange,提问作者Tcoia
相关产品推荐
相关产品推荐

