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

先明确一个关键点:Notepad++本身并不执行PowerShell脚本,它只是作为一个启动器,调用系统的PowerShell进程来运行当前打开的文件。整个过程能否成功,就取决于命令拼写、引号处理、路径切换和执行策略这四个环节。任何一个环节出错,结果往往是静默失败或者弹出一串令人费解的错误信息。
PowerShell 调用命令必须用单引号包裹路径
这里有个常见的“坑”:PowerShell对双引号内的变量会尝试进行“变量展开”。当Notepad++的$(FULL_CURRENT_PATH)变量被放在双引号里传递时,PowerShell会试图解析它,结果通常是得到一个空值,导致系统根本找不到要运行的文件。
- 最简洁可靠的方案是:
powershell -ExecutionPolicy Bypass -File '$(FULL_CURRENT_PATH)' - 如果需要运行后保留窗口查看输出或错误,可以加上
-noexit参数:powershell -noexit -ExecutionPolicy Bypass -File '$(FULL_CURRENT_PATH)' - 记住一个原则:双引号在PowerShell命令中,通常用于包裹整个命令字符串(比如在Notepad++的「运行」对话框输入时),而不是用来包裹文件路径的。
工作目录不自动切换,必须显式 cd
另一个容易忽略的细节是工作目录。PowerShell进程启动后,默认的工作目录是用户主目录($HOME),而不是你的脚本文件所在位置。如果不主动切换,那么脚本里所有基于相对路径的操作——比如Import-Module ./MyModule.psm1或者Get-Content ./config.json——都会因为找不到文件而失败。
- 推荐的组合命令是:
powershell -noexit -ExecutionPolicy Bypass -Command "cd '$(CURRENT_DIRECTORY)'; . '$(FULL_CURRENT_PATH)'" - 这里面的
.(点源操作符)是关键,它相当于安全地读取并执行指定路径的脚本内容。 - 如果脚本依赖同级或子目录下的资源,漏掉这个
cd步骤,等待你的大概率就是Cannot find path这类错误。
执行策略(ExecutionPolicy)是 Windows 默认拦路虎
即使你的脚本语法完美无缺,路径也完全正确,PowerShell本身还有一道安全关卡:执行策略。Windows系统默认的设置通常会阻止脚本运行,并给出类似File … cannot be loaded because running scripts is disabled on this system.的提示。
- 最直接的解决方案就是在命令中加入
-ExecutionPolicy Bypass。这个参数仅对当前这次PowerShell会话生效,不需要管理员权限去修改系统全局设置。 - 不必纠结于使用
RemoteSigned或AllSigned这类更复杂的策略——它们通常需要额外配置,对于临时测试或绿色版软件环境并不实用。 - 更不建议为了运行一个脚本,就去动用
Set-ExecutionPolicy命令修改全局策略。普通用户往往没有权限,管理员操作了又有潜在安全风险,可谓得不偿失。
中文路径/空格路径必须加引号,且引号位置不能错
路径中包含空格或中文字符,是另一个典型的失败场景。Notepad++提供的路径变量(如$(FULL_CURRENT_PATH))本身是不带引号的。当路径中有空格(例如C:\My Scripts\test.ps1)时,PowerShell会把空格前的部分当作一个独立的参数,从而报错The term 'C:\My' is not recognized。
- 解决办法很明确:必须用单引号将整个路径变量包裹起来,即
'$(FULL_CURRENT_PATH)'。注意,是单引号,不是双引号,也不是不加引号。 - 同样的规则也适用于目录变量:
'$(CURRENT_DIRECTORY)'。 - 对于中文路径,问题本质相同——PowerShell本身支持UTF-8编码,症结依然在于空格和缺失的引号保护。
最后总结一下核心逻辑:别指望从Notepad++点一下“运行”就能万事大吉。PowerShell启动后,不会自动继承编辑器的工作目录,也不会加载你的个人配置。所有脚本依赖的环境、模块或相对路径,都需要通过命令行参数显式地传递进去。每一个cd切换、每一个保护路径的单引号'、以及每一次策略绕过Bypass,都是确保脚本顺利运行的必要操作。
