F5报“系统找不到指定的文件”根本原因是命令行环境未就绪:g++.exe未加入PATH、路径含空格未加引号或文件未保存;验证需在cmd中运行g++ --version,失败则说明MinGW路径未正确配置或未重启Notepad++。

为什么F5直接报“系统找不到指定的文件”
这不是 Notepad++ 的问题,而是命令行环境根本没准备好:g++.exe 不在 PATH 中、路径含空格未加引号、或文件根本没保存——这三处任一出错都会让 g++ 命令直接失败。
验证方法:打开 cmd,输入 g++ --version。如果报错,说明 MinGW 的 bin 目录(比如 C:\mingw64\bin)没加进系统环境变量,或者加了但没重启 Notepad++。
常见踩坑点:
-
g++.exe装在C:\Program Files\MinGW\bin\g++.exe这类带空格路径下,脚本里写g++ xxx.cpp会卡在Program处——必须显式写成"C:\Program Files\MinGW\bin\g++.exe" - 没保存文件就点运行,
$(FULL_CURRENT_PATH)是空的,g++收到空参数,直接退出 - 用的是 MinGW-w64(非传统 MinGW),
g++.exe可能不在bin下,而在mingw64\bin或ucrt64\bin,得确认真实路径
NppExec脚本必须写的三件事
原生「运行 → 运行」只支持单条命令,没法判断编译是否成功就运行。NppExec 脚本才能闭环执行逻辑。
立即学习“C++免费学习笔记(深入)”;
一个可靠 C++ 编译+运行脚本应包含:
- 第一行:
NPP_SAVE—— 强制保存当前文件,避免执行旧代码 - 第二行:
cd $(CURRENT_DIRECTORY)—— 切换工作目录,确保#include "xxx.h"这类相对路径能被正确解析 - 第三行:
g++ -std=c++17 -Wall -Wextra -o "$(NAME_PART).exe" "$(FULL_CURRENT_PATH)"—— 显式指定标准、开启全部警告;注意$(NAME_PART)是大写P,不是$(NAME_part) - 第四行:
if $(EXITCODE) == 0 cmd /c "$(NAME_PART).exe"—— 只有编译成功才运行,否则停在错误输出界面,不会静默失败
中文乱码和控制台一闪而过怎么解
Windows 下 CMD 默认 ANSI 编码,而 Notepad++ 保存的文件多为 UTF-8,g++ 编译时若含中文字符串,不加参数会报错或显示乱码。
解决办法是加 -fexec-charset=gbk(适用于简体中文 Windows)或 -finput-charset=utf-8(更通用,但需确保源文件编码一致):
g++ -fexec-charset=gbk -std=c++17 -o "$(NAME_PART).exe" "$(FULL_CURRENT_PATH)"
控制台闪退本质是进程结束即关闭窗口。别用 cmd /k(它依赖外部 CMD 窗口),改用:
- 末尾加
& pause:例如if $(EXITCODE) == 0 cmd /c "$(NAME_PART).exe" & pause - 或用
npp_console 1显式启用内置控制台:npp_console 1 | if $(EXITCODE) == 0 cmd /c "$(NAME_PART).exe"
注意:npp_console 1 必须放在命令最前面,否则无效。
不同语言共用一套快捷键怎么配
不需要为 C++ 单独建一个菜单项再绑快捷键。用 $(EXT_PART) 做条件分支,一个脚本能通吃 .cpp、.c、.py:
NPP_SAVE if "$(EXT_PART)" == ".cpp" goto :cpp if "$(EXT_PART)" == ".c" goto :c if "$(EXT_PART)" == ".py" goto :py exit :cpp cd $(CURRENT_DIRECTORY) g++ -fexec-charset=gbk -std=c++17 -Wall -o "$(NAME_PART).exe" "$(FULL_CURRENT_PATH)" if $(EXITCODE) == 0 cmd /c "$(NAME_PART).exe" & pause goto :end :c cd $(CURRENT_DIRECTORY) gcc -fexec-charset=gbk -Wall -o "$(NAME_PART).exe" "$(FULL_CURRENT_PATH)" if $(EXITCODE) == 0 cmd /c "$(NAME_PART).exe" & pause goto :end :py python -u "$(FULL_CURRENT_PATH)" & pause goto :end :end
关键细节:
-
$(EXT_PART)返回的是.cpp(带点),不是cpp,所以比较时要写== ".cpp" -
python -u强制无缓冲输出,避免print()不刷新导致卡住 - 所有路径变量必须用双引号包裹,哪怕你确定路径没空格——这是最省心的防御性写法
真正容易被忽略的,是 NppExec 插件本身没加载成功:Notepad++ 7.9+ 不再内置插件管理器,NppExec.dll 必须手动放进 plugins 目录(不是 plugins\NppExec 子目录),且重启后菜单里看不到 NppExec 项,那后面所有脚本都白配。


















