从 Notepad Plus Plus 和当前目录运行文件

mcu*_*mcu 5 shell windows-xp notepad++ working-directory launching-application

网上有许多关于如何从 Notepad Plus Plus (NPP) 运行文件的示例。但是它们都没有考虑到当前工作目录是 NPP 可执行文件的位置,而不是文件的位置这一事实。
通常他们会这样:

cmd /K "$(FULL_CURRENT_PATH)" 
Run Code Online (Sandbox Code Playgroud)

考虑以下 Python 脚本:

with open('somefile.txt', 'a') as file:
    file.write('Hello there.\n')
Run Code Online (Sandbox Code Playgroud)

该文件将在 NPP 文件夹中创建,这完全不是大多数人所期望的。大多数人希望它与 Python 文件位于同一位置。

你也可以做这样的事情,它按预期工作,但这仅限于 Python 文件:

<Command name="Run This Python File" Ctrl="no" Alt="no" Shift="yes" Key="116">cmd /K python &quot;$(FULL_CURRENT_PATH)&quot;</Command>
Run Code Online (Sandbox Code Playgroud)

我不想在 Python 脚本中添加额外的代码来更改当前工作目录,因为通常不需要这样做。

我一直在努力解决这个问题,并提出了以下建议。此行位于NPP 文件夹中的“ shortcuts.xml ”中。

<Command name="Run This File" Ctrl="yes" Alt="no" Shift="no" Key="116">cmd /K &quot;cd &quot;$(CURRENT_DIRECTORY)&quot; &amp;&amp; &quot;$(FULL_CURRENT_PATH)&quot;&quot;</Command>
Run Code Online (Sandbox Code Playgroud)

所以你关闭 NPP,通过添加这一行来编辑“ shortcuts.xml ”,使用另一个编辑器,然后启动 NPP。要运行该文件,请使用Ctrl+F5组合键。

这在 Windows 10 中有效,但在 Windows XP 中失败。

如何调整它以在 Windows XP 中工作?

Jac*_*ssn 5

尝试这个:

cmd /k cd /d $(CURRENT_DIRECTORY) && python $(FULL_CURRENT_PATH)
Run Code Online (Sandbox Code Playgroud)


Cau*_*ite 1

我的猜测是问题是命令中嵌套的引号不正确;我不确定为什么它在以后的 Windows 上可以工作,而在 XP 上却失败。

命令

cmd /K &quot;cd &quot;$(CURRENT_DIRECTORY)&quot; &amp;&amp; &quot;$(FULL_CURRENT_PATH)&quot;&quot;
Run Code Online (Sandbox Code Playgroud)

代表

cmd /K "cd "$(CURRENT_DIRECTORY)" && "$(FULL_CURRENT_PATH)""
Run Code Online (Sandbox Code Playgroud)

即使从语法突出显示中,您也可以看到引号没有引用您所期望的内容。

为了获得想要的效果,可以使用以下命令:

cmd /K cd "$(CURRENT_DIRECTORY)" ^&^& "$(FULL_CURRENT_PATH)"
:: XML-ified:
cmd /K cd &quot;$(CURRENT_DIRECTORY)&quot; ^&amp;^&amp; &quot;$(FULL_CURRENT_PATH)&quot;
Run Code Online (Sandbox Code Playgroud)