Notepad++运行PowerShell脚本失败主因是四要素缺失:单引号包裹路径变量防展开、显式cd切换工作目录、-ExecutionPolicy Bypass绕过策略、中文/空格路径必须用单引号完整包裹,缺一即静默失败或报“running scripts is disabled”。

Notepad++ 本身不执行 PowerShell 脚本,它只是调用系统 powershell.exe 进程来运行当前文件——失败几乎全因四点:引号包裹错误、工作目录未切换、执行策略拦截、中文/空格路径漏处理。漏掉任一环节,脚本静默退出或报错 File … cannot be loaded because running scripts is disabled on this system.
为什么 powershell -File "$(FULL_CURRENT_PATH)" 总是失败?
因为双引号会让 PowerShell 尝试展开 $(FULL_CURRENT_PATH) 变量(结果为空),实际执行的是 powershell -File '',直接报错找不到文件。
- 必须用单引号包裹变量:
'$(FULL_CURRENT_PATH)'—— 单引号禁止变量展开,原样传入路径 - 不能写成
"'$(FULL_CURRENT_PATH)'"或"$(FULL_CURRENT_PATH)",后者仍会触发展开 - Notepad++ 的「运行」对话框里,整个命令字符串用双引号包住(这是 Notepad++ 解析需要),但路径部分必须用单引号
如何让脚本里的 Get-Content ./config.json 正常工作?
PowerShell 启动后默认工作目录是 $HOME,不是你的脚本所在目录。不切目录,所有相对路径操作都会失败,报 Cannot find path 'config.json'。
- 用
-Command替代-File,并显式cd切换:powershell -noexit -ExecutionPolicy Bypass -Command "cd '$(CURRENT_DIRECTORY)'; . '$(FULL_CURRENT_PATH)'" -
.是点源操作符,等价于加载并执行脚本,比Invoke-Expression (Get-Content ...)更安全 - 如果脚本依赖子目录(如
./lib/utils.ps1),漏掉cd就必然失败,和语法无关
-ExecutionPolicy Bypass 是唯一靠谱的解法吗?
是。Windows 默认策略是 Restricted,RemoteSigned 需要提前配置且对绿色版/临时环境不现实,Set-ExecutionPolicy 命令还要求管理员权限。
-
-ExecutionPolicy Bypass仅对本次 PowerShell 进程生效,无需提权,也不改注册表 - 别用
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser—— 普通用户常因权限不足失败;即使成功,也影响全局策略,后续别人用你机器可能被误伤 - PowerShell 7+ 在非 Windows 平台默认
Unrestricted,但 Notepad++ 通常跑在 Windows 上,所以绕不过这一步
中文路径或带空格的路径为什么总报 The term 'C:\My' is not recognized?
PowerShell 把空格当成参数分隔符,C:\My Scripts\test.ps1 被拆成两个参数:C:\My 和 Scripts\test.ps1,前者当然不是合法命令。
- 路径变量必须用单引号包住:
'$(FULL_CURRENT_PATH)',不能只包文件名,也不能用双引号 - Notepad++ 变量本身不含引号,靠你手动加——这是最常被忽略的细节
- 如果路径含中文,同样适用该规则;不加引号,连
Import-Module都会因路径截断而失败
真正卡住人的从来不是语法,而是引号嵌套层级、工作目录切换时机、执行策略作用域这三处细节。一旦路径含空格或中文,又没切目录,又没绕过策略,四个条件缺一不可——少一个,powershell.exe 就默默退出,连错误都不给你看。


















