乐于分享
好东西不私藏

p.ps1说明

p.ps1说明

p.ps1 说明


脚本概述

文件名p.ps1

用途: 分两步清理当前目录——第一步删除非保留后缀的文件,第二步删除中间文件(*_01.* ~ *_0u.*history

作者: 大柚子

版本: 1.0

适用系统: Windows (PowerShell 7)


使用方法

前提:脚本目录已通过 setuserpath.ps1 加入 PATH,可在任意目录直接调用。 若未加入 PATH,需写全路径:C:\ps1\p.ps1 或 .\p.ps1(需切换到脚本所在目录)。

# 普通模式:两步均需手动确认
p.ps1

# 静默模式:两步均跳过确认,直接执行
p.ps1 -y

操作流程

脚本分为两步,每步都有独立的确认提示:

Step 1:删除非保留后缀的文件

  • 列出所有不在保留列表中的文件
  • 提示 Delete? [Y]/N
  • Y / 回车:删除 → 进入 Step 2
  • N:跳过 → 进入 Step 2
  • 其他输入:重新询问

Step 2:删除中间文件

  • 列出匹配的中间文件(*_01.* ~ *_0u.*)和 history 目录
  • 提示 Delete intermediate files? [Y]/N
  • Y / 回车:删除 → 退出
  • N:跳过 → 退出
  • 其他输入:重新询问

-y 参数

-y 模式下,两步均跳过提示,等效于连续两次回车(每步默认选 Y)。


功能说明

主要功能

清理晶体学工作目录,分两步只保留核心文件:

保留的后缀:

后缀
文件类型
说明
.ins
SHELXL 指令文件
结构解析的指令文件,包含晶体学指令和原子坐标初始值
.res
SHELXL 结果文件
结构解析的结果文件,包含精修后的原子坐标和参数
.hkl
衍射数据文件
包含衍射强度数据 (hkl indices + intensity)
._ls
列表文件
SHELXL 输出的列表文件
.p4p
数据处理参数文件
数据处理参数文件
.pcf
参数配置文件
精修参数配置文件
.cif
晶体学信息文件
标准化格式的晶体学数据文件,用于发表和存档
.cif_od
晶体学信息文件 (原始数据)
原始数据的 CIF 格式备份
.abs
吸收校正文件
吸收校正相关数据

中间文件(Step 2)

模式
说明
*_01.*
 ~ *_13.*
SHELXL 多轮精修的中间文件
*_0u.*
特殊中间文件
spacestat.p4p
空间群统计文件
history
目录,包含精修历史

执行流程

  1. 参数解析 — 检查是否传入 -y 静默模式
  2. Step 1 — 扫描非保留文件 — 获取当前目录所有文件,筛选出不在保留列表中的
  3. Step 1 — 确认删除 — 显示清单,提示 [Y]/N,循环直到输入 y/n/回车
  4. Step 1 — 执行 — 删除确认的文件
  5. Step 2 — 扫描中间文件 — 按模式匹配中间文件和 history 目录
  6. Step 2 — 确认删除 — 显示清单,提示 [Y]/N,循环直到输入 y/n/回车
  7. Step 2 — 执行 — 删除确认的中间文件和 history 目录
  8. 完成 — 输出 Done!

输出示例

示例 1:正常删除

PS C:\crystal\project1> p.ps1

=== Files going to delete ===
DEL: temp.txt
DEL: old_data.xlsx
DEL: backup.zip

Delete? [Y]/N: y

=== Intermediate files ===
DEL: test_01.res
DEL: test_02.res
DEL: history

Delete intermediate files? [Y]/N: y
Done!

示例 2:Step 1 跳过

PS C:\crystal\project1> p.ps1

=== Files going to delete ===
DEL: temp.txt

Delete? [Y]/N: n

=== Intermediate files ===
DEL: test_01.res

Delete intermediate files? [Y]/N: n
Done!

示例 3:静默模式

PS C:\crystal\project1> p.ps1 -y

=== Files going to delete ===
DEL: temp.txt

=== Intermediate files ===
DEL: test_01.res
DEL: history

Done!

示例 4:无文件可删

PS C:\crystal\project1> p.ps1

=== Files going to delete ===

=== Intermediate files ===
No intermediate files found.
Done!

技术实现

Cmdlet 使用

Cmdlet
用途
Get-ChildItem
获取当前目录中的文件列表
Where-Object
筛选文件
ForEach-Object
遍历文件列表并输出文件名
Read-Host
获取用户输入
Remove-Item
删除文件
Select-Object
提取属性(文件名)

参数说明

参数
说明
-y
 (switch)
静默模式,跳过所有确认,每步默认执行删除
-File
 (Get-ChildItem)
只获取文件,排除文件夹
-Recurse
 (Remove-Item)
递归删除目录(用于 history)
-Force
 (Remove-Item)
强制删除只读/隐藏文件
-ErrorAction SilentlyContinue
忽略删除错误,继续执行

输出颜色

颜色
用途
Cyan
标题信息
Yellow
预览要删除的文件列表(DEL: xxx
Green
完成提示

应用场景

1. 晶体学工作目录清理

快速清理精修过程中产生的大量临时文件,只保留核心的 .ins.res.hkl 等文件。

2. 两步清理策略

  • Step 1:处理杂文件(.txt.log.bak 等)
  • Step 2:处理精修中间文件(*_01.* 等)和 history 目录

两步分离可以更精细地控制清理范围,避免误删有用的中间结果。

3. 批量处理

Get-ChildItem -Directory | ForEach-Object {
    Set-Location $_.FullName
    p.ps1 -y
    Set-Location ..
}

注意事项

1. 不可逆操作

删除文件是不可逆的操作。建议先用普通模式(不加 -y)预览要删除的文件,确认无误后再加 -y 批量执行。

2. 只处理当前目录

脚本只会处理当前目录中的文件,不会递归处理子文件夹

3. Step 1 的 N 是跳过不是退出

在 Step 1 选择 N 会跳过删除但继续执行 Step 2,而不是整个脚本退出。只有 Step 2 的 N 才是结束。

4. 其他输入会重问

输入既不是 y 也不是 n 的内容(如空格、abc 等)会重新提示,不会被误判为 N。


扩展与自定义

修改保留的后缀列表

修改脚本中 $keepExts 数组:

$keepExts = @('.ins', '.res', '.hkl', '.cif', '.pdf')

修改中间文件模式

修改 $patterns 数组:

$patterns = @('*_01.*', '*_02.*', '*_03.*', '*.tmp')

常见问题 (FAQ)

Q1: 脚本误删了文件,如何恢复?

如果启用了系统还原或文件历史记录,可以尝试恢复。否则,文件恢复的可能性较低。建议先用普通模式预览,确认无误后再用 -y 执行。

Q2: 如何只执行 Step 1 而跳过 Step 2?

普通模式下,Step 1 选择 Y 删除后,Step 2 选择 N 跳过即可。

Q3: -y 模式下能预览文件吗?

可以。-y 只跳过确认提示,不影响文件清单的显示。

Q4: 输入空格或其他字符会怎样?

会被视为无效输入,脚本会重新提示 [Y]/N,直到输入 y、n 或回车。


安全注意事项

  1. 备份优先: 在运行脚本前,务必备份重要数据
  2. 先用普通模式: 不确定时先不加 -y,确认清单后再加 -y 批量执行
  3. 仔细检查: 在确认删除前,仔细检查预览列表
  4. 权限管理: 确保对目标文件有删除权限,但也要防止误删系统文件

最后更新: 2026-05-15