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

问题描述:

网络上有很多关于如何从Notepad Plus Plus(NPP)运行文件的例子。但是他们都未能说明当前的工作目录是NPP可执行文件的位置,而不是文件的位置。
通常他们去是这样的:从Notepad Plus Plus和当前目录运行文件

cmd /K "$(FULL_CURRENT_PATH)" 

考虑以下Python脚本:

with open('somefile.txt', 'a') as file: 
    file.write('Hello there.\n') 

该文件将在核电站的文件夹,这是根本不是多数人的期待被创建。大多数人会希望它与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> 

我不想额外的代码添加到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> 

所以你关闭核电站,加入这一行,使用其他编辑器编辑“shortcuts.xml”,然后启动核电站。 要运行该文件,请使用Ctrl + F5组合键。

这适用于Windows 10,但在Windows XP中失败。

我该如何调整它在Windows XP中的工作?

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

命令

cmd /K &quot;cd &quot;$(CURRENT_DIRECTORY)&quot; &amp;&amp; &quot;$(FULL_CURRENT_PATH)&quot;&quot; 

代表

cmd /K "cd "$(CURRENT_DIRECTORY)" && "$(FULL_CURRENT_PATH)"" 

即使从语法高亮,你可以看到,报价不引用你的期望。

为了获得预期的效果,你可以使用这个命令:

cmd /K cd "$(CURRENT_DIRECTORY)" ^&^& "$(FULL_CURRENT_PATH)" 
:: XML-ified: 
cmd /K cd &quot;$(CURRENT_DIRECTORY)&quot; ^&amp;^&amp; &quot;$(FULL_CURRENT_PATH)&quot; 

我从记事本上运行多个Windows .bat文件++。为实现项目的这一个在文件C:\Users\AdrianHHH\AppData\Roaming\Notepad++\shortcuts.xml<UserDefinedCommands>部分是:

<Command name="CD and run file" Ctrl="no" Alt="no" Shift="no" Key="0">cmd /C &quot;cd /d $(CURRENT_DIRECTORY) &amp;&amp; $(FULL_CURRENT_PATH)&quot;</Command> 

随着.bat作为当前的文件,然后我用菜单=>运行 =>CD和运行文件

问题中显示的命令行似乎有太多符号&quot;。当前目录包含驱动器说明符,因此CD需要\D选项。

我使用的命令启动cmd \C ...(而不是问题中的\K),因此命令窗口自动关闭。我的.bat文件通常以choice /t 60 /C Y /d Y /n完成,所以我可以看到命令的输出。

+0

你的命令行的问题是'$(FULL_CURRENT_PATH)'没有被引用。例如,如果它的值是''c:\ f \ xyz \ w.exe“',那么没有引号就会被解释为'”c:\ f \ x“”y“”z \ w.exe “'。不过你说得对,使用'/ d'标志可能是一个好主意。 – Cauterite

+0

@Cauterite,No.CHDIR(即CD)是一个有趣的命令,它不同地解释空间。命令“CD /?”的输出包含*“CHDIR命令不会将空格视为分隔符,因此可以将CD转换为包含空格的子目录名称,而不包含名称带引号”*“的空格。 – AdrianHHH

+0

'$(FULL_CURRENT_PATH)'不用作'cd'的参数。 'cd'命令在'&&'结束,所以这个“不同的空间解释”行为不适用于'&&'之后的命令。 – Cauterite

记事本++> F5(运行)>然后键入以下命令

cmd /K cd "$(CURRENT_DIRECTORY)" && python "$(FULL_CURRENT_PATH)" 

假定已经设置了路径,或可以使用C:\ Python27 \ python.exe或者蟒二进制文件的路径,并您将在python所在的文件夹中运行python。您还可以通过单击按钮Save...将此命令保存为快捷方式。

之后,您还可以在工具栏>运行>修改快捷/删除命令中修改命令。