2026-03-02 19:52:52
touch 命令:当文件不存在时创建文件,存在时更新它的修改时间。PowerShell 本身并没有内置 touch 命令,但我们可以自己实现一个行为与 Unix 类似的版本(支持多个文件和通配符)。
本文提供一个实用的 touch 函数,你可以将其添加到 PowerShell Profile 中长期使用,同时包含示例和一些边界情况说明。
touch 通常具备以下特性:
*.txt
if (Test-Path .\file.txt) { (Get-Item .\file.txt).LastWriteTime = Get-Date } else { New-Item -ItemType File -Path .\file.txt | Out-Null }
function touch {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true, ValueFromRemainingArguments=$true)]
[string[]] $Path,
# 可选:当父目录不存在时自动创建
[switch] $MakeDirs
)
$now = Get-Date
foreach ($p in $Path) {
# 展开通配符(例如 *.txt),若无匹配则按字面路径处理
$expanded = @(Get-ChildItem -LiteralPath $p -ErrorAction SilentlyContinue)
if ($expanded.Count -gt 0) {
foreach ($item in $expanded) {
if ($item.PSIsContainer) {
continue # 跳过目录(Unix 行为可不同,这里更安全)
}
$item.LastWriteTime = $now
}
continue
}
# 没有通配符匹配时,按普通路径处理
if (Test-Path -LiteralPath $p) {
$item = Get-Item -LiteralPath $p
if (-not $item.PSIsContainer) {
$item.LastWriteTime = $now
}
continue
}
# 创建文件(可选创建父目录)
if ($MakeDirs) {
$parent = Split-Path -Parent $p
if ($parent -and -not (Test-Path -LiteralPath $parent)) {
New-Item -ItemType Directory -Path $parent -Force | Out-Null
}
}
New-Item -ItemType File -Path $p -Force | Out-Null
}
}
touch .\hello.txt
同时操作多个文件:
touch .\a.txt .\b.txt .\c.txt
更新当前目录下所有 .log 文件:
touch *.log
在嵌套目录中创建文件,并自动创建目录:
touch .\logs\2026\app.log -MakeDirs
notepad $PROFILE
将 touch 函数粘贴进去,保存并重启 PowerShell。
如果 Profile 被禁用,可以为当前用户启用:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
Set-Alias -Name t -Value touch
也可以把这行加入 Profile。
PSIsContainer 判断。
通配符:PowerShell 使用 Get-ChildItem 处理通配符。如果通配符没有匹配结果,函数会按普通路径创建该文件(符合大多数人的预期)。
不会修改文件内容:不同于 "" >> file 的做法,本函数不会向文件追加换行或改变文件内容。
英文:The touch command in Windows Powershell
2026-03-02 07:42:49
登上欧洲之巅:我的少女峰之旅 年末瑞士行:在Jungfraujoch看见世界的高度 五天四晚,奔赴少女峰的冰雪世界 申根签证到期前的最后一站:瑞士少女峰 站在3454米的地方,和这一年告别 瑞士冬日记:从Interlaken到欧洲之巅 年终收官之旅:少女峰的白色震撼 《站在欧洲之巅,与这一年告别》 《年末瑞士行:少女峰 Jungfraujoch 全记录》去年年底,趁着申根签证还未到期,我们决定把瑞士作为这一年的收官之旅。五天四晚的行程中,最重要的一站,自然是登上少女峰——Jungfraujoch。 少女峰 Jungfraujoch 位于瑞士伯尔尼高地,海拔 3454 米,是欧洲海拔最高的火车站所在地,因此被称为“欧洲之巅”(Top of Europe)。它坐落在少女峰(Jungfrau)与僧侣峰(Mönch)之间,俯瞰壮丽的阿莱奇冰川(Aletsch Glacier)——这是阿尔卑斯山脉最长的冰川,也被列入联合国教科文组织世界自然遗产名录。游客可以搭乘齿轨火车穿越隧道直达山顶,在观景平台远眺连绵雪峰,在冰宫感受晶莹剔透的冰雪世界。这里不仅是瑞士最具代表性的地标之一,也是许多人心中一生必去的高山目的地。 上山的路线有好几种。我们选择从 Interlaken 坐火车前往 Grindelwald,然后转乘缆车,大约 15 分钟到达 Eigergletscher,再换乘齿轨火车一路攀升至 Jungfraujoch。下山时则选择直接乘火车返回,省时也更从容。 [caption id="attachment_71041" align="alignnone" width="1155"]
瑞士少女峰上山路径[/caption]
那段 15 分钟的缆车旅程其实挺刺激。车厢悬在高空,脚下是陡峭的山坡和白茫茫的雪地,偶尔缆车会轻轻晃动一下,甚至带来一瞬间微微的失重感,让人心里一紧。好在天气很好,视野开阔。透过车窗往下看,可以看到很多人在山坡上滑雪,身影在雪地上划出一道道优雅的弧线,自由又惬意。
少女峰 Jungfraujoch 被称为“欧洲之巅”(Top of Europe),海拔 3454 米,是欧洲海拔最高的火车站。这里位于阿尔卑斯山脉的核心区域,四周被冰川环绕,壮阔而纯净。站在观景平台上,远处连绵的雪峰在阳光下闪闪发亮,仿佛置身于一个巨大的冰雪王国。空气清冽,寒风凛冽,但那种辽阔与震撼,让人几乎忘记寒冷。
在冰宫里,晶莹剔透的冰雕和冰墙透出幽蓝的光;在观景台上,游客们裹着厚厚的羽绒服拍照留念,每个人脸上都带着兴奋与满足。那一刻会真正理解,为什么这么多人不远万里来到这里——并不仅仅是为了“打卡”,而是为了亲眼看看世界的高度。
五天的瑞士之行,其实并不算长,但足够让人放慢脚步。湖水像镜子一样安静,小镇干净而有秩序,远处的雪山像背景板一样永远矗立在那里。作为一年的最后一趟旅行,它既有仪式感,也带着一点对新一年的期待。站在“欧洲之巅”回望过去的一年,忽然觉得,很多烦恼都变得渺小了。
PS:山顶风很大,也非常冷,我们都裹得严严实实。听说少女峰上能遇到晴朗天气并不算常见,所以这次能看到蓝天白雪,算是相当幸运。中午我们在山顶的快餐店简单吃了点东西就准备下山了。由于海拔高、空气稀薄,稍微走几步就觉得有点累,甚至有些发晕,只能放慢节奏慢慢走。
视频:油管/Youtube | B站/小破站 | 微博视频 | 西瓜视频 | 微信视频号 | X/推特 | 小红书 | Facebook
[caption id="attachment_71049" align="alignnone" width="2048"]
瑞士雪山边上的房子/好幸福[/caption]
[caption id="attachment_71048" align="alignnone" width="2048"]
山腰上的火车站,空气有点稀薄[/caption]
[caption id="attachment_71047" align="alignnone" width="2048"]
缆车往外拍的雪山美景[/caption]
[caption id="attachment_71046" align="alignnone" width="1365"]
少女峰上风大很冷 老大包的严严实实。[/caption]
[caption id="attachment_71045" align="alignnone" width="1108"]
从缆车下来,最后一段路程我们选择火车上去。[/caption]
[caption id="attachment_71044" align="alignnone" width="2048"]
和媳妇在少女峰上合影,用AI把背景的游客删掉了[/caption]
[caption id="attachment_71043" align="alignnone" width="2048"]
很幸运,上山那一天天气晴朗。[/caption]
[caption id="attachment_70749" align="alignnone" width="2048"]
2025-12-27全家爬上了瑞士少女峰 jungfraujoch[/caption]
[show_file file="/var/www/wp-post-common/justyy.com/switzerland.php"]
2026-02-23 19:23:05
上周五中午抽空去了 Peterborough(单程开车约50分钟),参加并通过了 AI-102:Microsoft AI Engineer Associate 认证考试,中文可以理解为“微软 AI 工程师助理”。
被官网认证为AI工程师助理!
[caption id="attachment_71027" align="alignnone" width="1137"]
AI-102微软人工智能工程师/助理[/caption]
之前考过的 AI-900 属于基础级认证,没有过期时间,证书上是一颗星。
这次通过的是两颗星的中级认证(费用165美元)。中级及以上证书有效期为一年,过期前6个月可以在线免费续考。据说如果续考没通过,可以每24小时重考一次,也就是说理论上最多有大约180次续考机会。
这次的 AI-102 难度明显高于 AI-900。AI-900 主要考察对概念的理解,而 AI-102 不仅要求理解原理,还要掌握具体 API 的使用方法,以及在不同场景(Case Study)下如何选择和应用合适的 AI 模型。
考试时长大约两小时,分为两部分。
第一部分是选择题(单选、多选、下拉、排序等),可以标记(Mark for review)后面再回头检查。
第二部分是 Case Study,提交后无法返回修改。我做完第一部分并复查后,开始第二部分时只剩下大约20分钟,时间还是挺紧张的。
考过之后真的很开心。这也是获取多巴胺的一种方式吧。努力学习,卷起来,给孩子做榜样,保持持续学习的状态 💪
[show_file file="/var/www/wp-post-common/justyy.com/exams.php"]
2026-02-23 19:08:26
main() 里先写这两行:
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
}
很多新手会觉得像“祖传模板”,但它们确实能在 IO 很重的题里显著提速。原因主要有两个:同步和自动刷新。
ios::sync_with_stdio(false) 能加速?cin / cout。默认情况下,它们会和 C 的 scanf / printf 保持同步。
同步的意思是:当你用 cout 输出时,C++ 的 IO 层会和 C 的 stdio 层做额外的协调工作,确保两套机制混用时输出顺序一致。但在竞赛里我们通常只用 cin/cout,不需要这种同步,反而增加开销。
所以这一行:
ios::sync_with_stdio(false);
会解除 C++ IO 与 C IO 的同步,从而减少不必要的开销,尤其在大量读写数据时更明显。
cin.tie(nullptr) 也能加速?cout 并不会每输出一次就立刻写到终端,而是先进入缓冲区,之后再统一刷新(flush),因为频繁和操作系统交互很慢。
默认情况下,cin 会“绑定”(tie)到 cout:每次执行 cin 读取之前,都会自动把 cout 的缓冲区刷新一次,以保证交互式程序里提示信息能及时显示。
但竞赛题不是交互式程序,没必要每次读入前都 flush,于是这一行:
cin.tie(nullptr);
会解除 cin 与 cout 的绑定,避免额外的自动刷新,进一步提升 IO 性能。
main() 最开始:
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
}
scanf/printf 和 cin/cout 时(关闭同步后可能导致顺序问题)。2026-02-13 07:11:52
[caption id="attachment_71003" align="alignnone" width="1382"]
微软证书/升级打卡[/caption]
[caption id="attachment_71002" align="alignnone" width="2048"]
微软证书/升级打卡[/caption]
| Code | 领域 | 证书名 | 证书编号 | 获得日期 |
|---|---|---|---|---|
| AI-900 | 人工智能/AI | Azure AI Fundamentals | 7Z9DA9-388866 | 2025年12月19日 (大纲) |
| DP-900 | 数据/Data | Azure Data Fundamentals | CD4244-E236BG | 2025年12月19日 (大纲) |
| SC-900 | 安全/Security | Security, Compliance, and Identity Fundamentals | B6A851-BECO96 | 2026年1月13日 (大纲) |
| AZ-900 | 云/Cloud | Azure Fundamentals | B6FAD6-2S7125 | 2026年1月16日 (大纲) |