如何在NodeJS中获取运行中VS Code实例的当前工作目录并校验指定路径?
在Node.js中检测运行中VS Code实例的工作目录是否可行?
可以实现,主要有两种可靠的思路,下面分别说明:
方法一:通过VS Code官方CLI命令获取信息
VS Code自带的CLI工具提供了code --status命令,能直接输出当前运行实例的详细信息,包括已打开的工作目录。这种方式无需解析系统进程,准确性更高。
代码示例
const { exec } = require('child_process'); function checkVSCodeWorkspace(targetDir) { // 注意:需确保code命令在系统PATH中,否则要指定完整路径 exec('code --status', (err, stdout) => { if (err) { console.error('获取VS Code状态失败:', err.message); return; } // 提取工作区文件夹部分 const workspaceMatch = stdout.match(/Workspace folders:\n((?:\s*- .+\n?)+)/); if (!workspaceMatch) { console.log('当前无VS Code工作区实例'); return; } // 解析每个工作目录路径 const workspacePaths = workspaceMatch[1] .split('\n') .map(line => line.trim().replace(/^\*- /, '')) .filter(path => path); // 匹配目标目录 if (workspacePaths.includes(targetDir)) { console.log(`找到工作目录为${targetDir}的VS Code实例`); } else { console.log(`未找到工作目录为${targetDir}的VS Code实例`); } }); } // 调用示例 checkVSCodeWorkspace('/home/foobar/Desktop/myproject');
注意事项
- 如果
code命令不在系统PATH中,需要替换为VS Code的完整执行路径:- Linux:
/usr/bin/code - macOS:
/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code - Windows:
"C:\\Program Files\\Microsoft VS Code\\bin\\code.cmd"
- Linux:
方法二:解析系统进程的启动参数
通过系统命令获取VS Code进程的启动参数,从中提取工作目录。这种方式不依赖VS Code的CLI,但需要处理不同操作系统的进程输出格式。
代码示例
const { exec } = require('child_process'); function checkVSCodeWorkspace(targetDir) { let cmd; // 根据操作系统选择对应的进程查询命令 if (process.platform === 'win32') { cmd = 'tasklist /v /fi "imagename eq Code.exe" /fo csv'; } else { cmd = 'ps aux | grep -E "(code|Code)" | grep -v grep'; } exec(cmd, (err, stdout) => { if (err) { console.error('获取进程信息失败:', err.message); return; } const processes = stdout.split('\n').filter(line => line.trim()); let found = false; for (const proc of processes) { let workspacePath; if (process.platform === 'win32') { // 解析Windows的CSV格式输出,提取命令行参数 const parts = proc.split('","'); if (parts.length >= 8) { const cmdLine = parts[7]; // 匹配最后一个引号内的路径(通常是工作目录) const pathMatch = cmdLine.match(/"([^"]+)"$/); workspacePath = pathMatch ? pathMatch[1] : null; } } else { // 解析Linux/macOS的ps输出,提取code命令后的路径参数 const parts = proc.split(/\s+/); const codeIndex = parts.findIndex(part => part.includes('code')); workspacePath = codeIndex !== -1 ? parts[codeIndex + 1] : null; } if (workspacePath === targetDir) { found = true; break; } } console.log(found ? `找到工作目录为${targetDir}的VS Code实例` : `未找到工作目录为${targetDir}的VS Code实例`); }); } // 调用示例 checkVSCodeWorkspace('/home/foobar/Desktop/myproject');
注意事项
- 需处理VS Code不同版本的进程名称(比如Insiders版本是
code-insiders或Code - Insiders.exe)。 - Windows下可能需要管理员权限才能获取完整的进程命令行信息。
内容的提问来源于stack exchange,提问作者user3601578
相关产品推荐
相关产品推荐

