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]/NY / 回车:删除 → 进入 Step 2 N:跳过 → 进入 Step 2 其他输入:重新询问
Step 2:删除中间文件
列出匹配的中间文件( *_01.*~*_0u.*)和history目录提示 Delete intermediate files? [Y]/NY / 回车:删除 → 退出 N:跳过 → 退出 其他输入:重新询问
-y 参数
-y 模式下,两步均跳过提示,等效于连续两次回车(每步默认选 Y)。
功能说明
主要功能
清理晶体学工作目录,分两步只保留核心文件:
保留的后缀:
.ins | ||
.res | ||
.hkl | ||
._ls | ||
.p4p | ||
.pcf | ||
.cif | ||
.cif_od | ||
.abs |
中间文件(Step 2):
*_01.**_13.* | |
*_0u.* | |
spacestat.p4p | |
history |
执行流程
参数解析 — 检查是否传入 -y静默模式Step 1 — 扫描非保留文件 — 获取当前目录所有文件,筛选出不在保留列表中的 Step 1 — 确认删除 — 显示清单,提示 [Y]/N,循环直到输入 y/n/回车Step 1 — 执行 — 删除确认的文件 Step 2 — 扫描中间文件 — 按模式匹配中间文件和 history 目录 Step 2 — 确认删除 — 显示清单,提示 [Y]/N,循环直到输入 y/n/回车Step 2 — 执行 — 删除确认的中间文件和 history 目录 完成 — 输出 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 使用
Get-ChildItem | |
Where-Object | |
ForEach-Object | |
Read-Host | |
Remove-Item | |
Select-Object |
参数说明
-y | |
-File | |
-Recurse | |
-Force | |
-ErrorAction SilentlyContinue |
输出颜色
DEL: xxx) | |
应用场景
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 或回车。
安全注意事项
备份优先: 在运行脚本前,务必备份重要数据 先用普通模式: 不确定时先不加 -y,确认清单后再加-y批量执行仔细检查: 在确认删除前,仔细检查预览列表 权限管理: 确保对目标文件有删除权限,但也要防止误删系统文件
最后更新: 2026-05-15
夜雨聆风