Notepad++运行PowerShell脚本需四要素:单引号包裹路径变量防止变量展开、显式cd切换工作目录、-ExecutionPolicy Bypass绕过执行策略、中文/空格路径必须加单引号。

Notepad++ 本身不执行 PowerShell 脚本,它只是调用系统 PowerShell 进程来运行当前文件——关键在于命令拼写、引号处理、路径切换和执行策略这四点,漏掉任一环节都会静默失败或报错。
PowerShell 调用命令必须用单引号包裹路径
PowerShell 对双引号内的 $(FULL_CURRENT_PATH) 会尝试变量展开(结果为空),导致找不到文件。正确写法是用单引号防止解析:
-
powershell -ExecutionPolicy Bypass -File '$(FULL_CURRENT_PATH)'—— 最简可靠方案 - 若需保留窗口查错,改用
-noexit:powershell -noexit -ExecutionPolicy Bypass -File '$(FULL_CURRENT_PATH)' - 双引号在 PowerShell 命令中仅用于包裹整个命令字符串(如 Notepad++ 的「运行」对话框输入框里),不是给路径用的
工作目录不自动切换,必须显式 cd
PowerShell 启动后默认在 $HOME,不是脚本所在目录。不切目录会导致 Import-Module、Get-Content ./config.json 等相对路径操作全部失败。
- 推荐组合命令:
powershell -noexit -ExecutionPolicy Bypass -Command "cd '$(CURRENT_DIRECTORY)'; . '$(FULL_CURRENT_PATH)'" - 注意:
.是 PowerShell 的点源操作符,等价于Invoke-Expression (Get-Content ... | Out-String),但更安全 - 如果脚本依赖当前目录下的子目录或配置文件,漏掉
cd就会报Cannot find path
执行策略(ExecutionPolicy)是 Windows 默认拦路虎
即使脚本语法完全正确,PowerShell 也会因策略限制直接拒绝运行,错误信息是:File … cannot be loaded because running scripts is disabled on this system.
-
-ExecutionPolicy Bypass是最直接解法,只对本次会话生效,无需管理员权限改系统策略 - 不用
RemoteSigned或AllSigned—— 它们需要提前配置,且对绿色版或临时环境不现实 - 别用
Set-ExecutionPolicy命令去“永久修改”——普通用户没权限,管理员改了也影响全局,得不偿失
中文路径/空格路径必须加引号,且引号位置不能错
Notepad++ 变量如 $(FULL_CURRENT_PATH) 本身不含引号。当路径含空格(如 C:\My Scripts\test.ps1)时,PowerShell 会把空格前截断为单独参数,报 The term 'C:\My' is not recognized。
- 必须用单引号包住整个路径变量:
'$(FULL_CURRENT_PATH)',不是"$(FULL_CURRENT_PATH)",也不是不加引号 - 同理,
$(CURRENT_DIRECTORY)也要加单引号:'$(CURRENT_DIRECTORY)' - 如果路径含中文,同样适用——PowerShell 本身支持 UTF-8 路径,问题只出在空格和引号缺失
最容易被忽略的是:PowerShell 启动后默认不继承 Notepad++ 的当前工作目录,也不自动加载 profile,所有依赖环境变量、模块路径或当前目录的操作都得靠命令行显式带进去。别指望“点了就跑”,每个 cd、每个 '、每个 Bypass 都是必要动作。

















