如何在Polyglot Notebook中用PowerShell获取执行文件目录?
在Polyglot Notebook(PowerShell环境)中获取笔记本文件所在目录
原生PowerShell里的$PSScriptRoot或$MyInvocation.MyCommand.Path在Polyglot Notebook中无法直接使用,因为Notebook的执行模型与普通脚本不同。
符合Notebook规范的写法是利用Polyglot Notebook(原.NET Interactive Notebook)提供的内置环境变量$env:DOTNET_INTERACTIVE_NOTEBOOK_PATH,它会返回当前笔记本文件的完整路径,再通过Split-Path提取所在目录:
# 获取当前笔记本文件的完整路径 $notebookFullPath = $env:DOTNET_INTERACTIVE_NOTEBOOK_PATH # 提取笔记本所在目录 $notebookDirectory = Split-Path -Path $notebookFullPath -Parent
这个方法比Get-Location更可靠:Get-Location返回的是当前工作目录,可能因手动切换路径而与笔记本实际存储目录不一致;而$env:DOTNET_INTERACTIVE_NOTEBOOK_PATH直接绑定笔记本文件本身,只要笔记本已保存,就能准确获取其所在目录。
如果是未保存的临时笔记本,该环境变量会为空,此时可以 fallback 到Get-Location作为替代方案。
内容的提问来源于stack exchange,提问作者Alex KeySmith
相关产品推荐
相关产品推荐

