Windows 使用技巧

Windows 归档文件夹前,怎样导出只读清单再核对?

在 Windows 上用 PowerShell 7.5 从明确的项目文件夹导出相对路径、大小和修改时间,再预览 CSV,核对归档范围而不移动或删除源文件。

撰文: 3sec 编辑部 资料核对日期: 5 分钟阅读 2071 字

归档 Windows 项目文件夹前,先限定一个来源根目录,把文件的相对路径、字节数和修改时间导出到来源之外的新 CSV。这个流程读取文件属性并写一份报告,不会替你移动、重命名、删除或打包源文件。

先固定归档边界,把报告放在来源目录之外

清单是否有用,首先取决于扫描范围是否写清楚。不要从整个 C:\ 开始,也不要把报告保存在待归档文件夹里,否则下一次扫描会把报告本身算成新增文件。

例如项目交接只要求 C:\Projects\Client-A\Handoff 下的文件,但设计源文件还引用了另一块磁盘的字体和素材。清单只能回答这个根目录当时枚举到什么,不能自动发现外部依赖、数据库、浏览器凭据或云端尚未下载的内容。先在文件资源管理器确认来源路径,再在外部建立类似 C:\ArchiveAudit\2026-09-01 的审计目录,并保留上一轮报告。

本文在 2026-09-01 按 Microsoft Learn 核对 PowerShell 7.5 on Windows。早期 PowerShell、非 Windows 系统、受组织策略限制的终端和特殊存储提供程序不在相同保证范围内。Windows PowerShell 5.1 可以作为人工适配的备选,但文本编码默认值不同,不能把 7.5 的参数拼写和输出字节直接视为完全一致。

在 PowerShell 7.5 先枚举,再导出不覆盖的报告

先把枚举结果留在变量里,查看数量与终端错误,再决定是否导出。这样能避免“CSV 已经生成”被误读成“所有目录都成功读取”。

  • 设置来源:$sourceRoot = (Resolve-Path -LiteralPath 'C:\Projects\Client-A\Handoff').Path
  • 设置新报告名:$reportPath = 'C:\ArchiveAudit\2026-09-01\handoff-inventory.csv'
  • 枚举文件:$items = Get-ChildItem -LiteralPath $sourceRoot -File -Recurse -Force
  • 先看数量:$items.Count
  • 导出报告:$items | Sort-Object FullName | Select-Object @{Name='RelativePath';Expression={$_.FullName.Substring($sourceRoot.Length).TrimStart('\')}}, Length, LastWriteTimeUtc, Attributes | Export-Csv -LiteralPath $reportPath -NoTypeInformation -Encoding utf8BOM -NoClobber

Microsoft 的 Get-ChildItem 7.5 文档说明,-LiteralPath 按输入文字解释路径,-File 只返回文件,-Recurse 枚举子目录,-Force 可包含默认不显示的隐藏或系统项。不过 -Force 不会绕过安全限制;出现拒绝访问时,清单就可能不完整,不能只忽略红色错误继续归档。

Export-Csv 7.5 文档说明,对象属性会成为 CSV 行,并建议在导出前用 Select-Object 选择属性,不要先接 Format-Table。-NoClobber 会在同名报告已存在时停止覆盖;此时应换一个新的带日期文件名,而不是删掉保护参数。

示例明确使用 utf8BOM。Microsoft 的 PowerShell 字符编码说明指出,PowerShell 6 及以上文本输出默认是无 BOM 的 UTF-8;显式编码能让本次报告规则更清楚。如果只能用 Windows PowerShell 5.1,请使用该版本接受的 -Encoding UTF8,随后人工检查中文路径,不要假定字节结果和 7.5 相同。

把隐藏项、空目录和链接限制写进审计记录

一份成功打开的 CSV 仍可能漏项。应把终端中的访问错误、扫描时间和特殊目录一起记录,而不是只保存最后的行数。

-File 意味着空目录不会出现在清单中;如果软件依赖空文件夹结构,需要另做目录清单。PowerShell 7.5 默认在递归时显示遇到的目录符号链接,但不会进入链接目标,示例也没有添加 -FollowSymlink。对于 junction、reparse point、云盘占位文件或组织管理的同步目录,应由项目负责人定义归档范围,不能为了“多扫一些”随意跟随链接。

文件还可能在扫描过程中被应用修改。修改时间和大小只是枚举当时看到的属性,不是快照,也不是内容校验。报告里有一行 database.db,不代表数据库处于可恢复的一致状态;同名、同大小的两个文件也不代表字节相同。

本流程不需要改名。如果后续确实要批量重命名,先保留完整备份或隔离测试副本,再用带 -WhatIf 的 Rename-Item 预览每个目标,确认后才另行执行;只改扩展名也绝不是格式转换。

用 CSV 预览核对报告,不要声称它编辑文件

打开 CSV / Excel 在线预览后,先确认 RelativePath、Length、LastWriteTimeUtc 和 Attributes 四列,再抽查已知的顶层文件、深层文件和隐藏配置项。这里查看的是刚生成的报告,不是让网页再次扫描 Windows。

当前组件在浏览器中解析选中的 CSV、TSV、XLS 或 XLSX,可切换工作表、搜索已加载的行并显示匹配数量。表格最多渲染 500 条匹配数据;状态数量大于 500 时,画面中的可见行不是完整清单。SheetJS 解析器从 jsDelivr 加载,网络策略阻止 CDN 时会显示加载错误。

工具只有预览能力,不会修改所选 CSV 或 XLSX,也不会访问报告里列出的路径、移动文件、删除文件或创建归档。页面的搜索框只影响显示结果;“导出 CSV”会把当前工作表的全部已解析行另存为新的 data.csv,不会把搜索结果写回原报告。审计时应保留 PowerShell 生成的原始报告,不要拿二次下载替换它。

归档完成后用同一规则做结果核对

验收时要比较相同边界和相同字段,而不是只看两个压缩包大小。由获授权的人完成归档并解压到独立位置后,再按同样规则生成第二份清单;记录两次扫描的路径、时间、错误和文件数量。

可以把两份已排序、且不含不该外传路径的相对路径列表放进文字差异比对查找缺少或多出的行。文字比对只比较粘贴内容,不能读取文件字节、验证权限或证明归档可恢复。

最后打开几个有代表性的文件:顶层说明、深层文档、大文件和应用专用数据各取一项,并用原应用完成恢复测试。只要仍有拒绝访问、云端未下载、外部依赖或无法解释的路径差异,就把归档标记为待确认,而不是把 CSV 行数相同当成完成。

常见问题

这些 PowerShell 命令会改动来源文件吗?

不会。Get-ChildItem 读取属性,管道在外部路径新建 CSV;命令不包含移动、删除或重命名操作。报告本身是新文件,因此输出目录仍要事先确认。

为什么已经用了 -Force,清单仍可能不完整?

-Force 可以显示隐藏或系统项,但不会绕过访问控制。拒绝访问、变化中的文件、链接目标和云端状态都可能需要单独处理。

Windows PowerShell 5.1 能直接复制同一条命令吗?

不要无条件复制。本文核对的是 PowerShell 7.5;5.1 的文本编码行为不同,应把编码改成该版本支持的 UTF8,并重新检查中文路径和接收程序。

ToolboxHub 可以编辑清单或替我归档吗?

不能。CSV / Excel 在线预览只在浏览器中解析和显示选定文件,并可下载一份新的 CSV;它不会写回原文件、扫描磁盘、编辑工作簿或创建归档。

预览里没有差异,就能证明归档可恢复吗?

不能。路径和属性清单只是一个检查层;文件字节、权限、应用一致性、外部依赖与真实恢复仍要用合适的工具和人工步骤验证。

参考资料