Shell 从记事本Plus和当前目录运行文件

Shell 从记事本Plus和当前目录运行文件,shell,notepad++,windows-xp,launching-application,working-directory,Shell,Notepad++,Windows Xp,Launching Application,Working Directory,关于如何从Notepad Plus(NPP)运行文件,web上有许多示例。但它们都没有考虑到当前工作目录是NPP可执行文件的位置,而不是文件的位置这一事实。 通常是这样的: cmd /K "$(FULL_CURRENT_PATH)" 考虑以下Python脚本: with open('somefile.txt', 'a') as file: file.write('Hello there.\n') 该文件将在NPP文件夹中创建,这完全不是大多数人所期望的。大多数人都希望它与Pytho

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

cmd /K "$(FULL_CURRENT_PATH)" 
考虑以下Python脚本:

with open('somefile.txt', 'a') as file:
    file.write('Hello there.\n')
该文件将在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>
cmd/K python“$(完整当前路径)”
我不想在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>
cmd/K“cd”$(当前目录)&;“$(完整当前路径)”
因此,您关闭了NPP,使用另一个编辑器添加此行来编辑“shortcuts.xml”,然后启动NPP。 要运行该文件,请使用Ctrl+F5组合键

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


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

我猜问题在于命令中的引号嵌套不正确;我不太清楚为什么它在XP上失败的同时还能在以后的Windows上工作

命令

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
部分中的一个条目是:

<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>
cmd/C“cd/d$(当前目录)&;$(完整当前路径)”
使用
.bat
作为当前文件,然后使用menu=>运行=>CD并运行文件

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

我使用的命令启动
cmd\C…
(而不是问题中的
\K
),因此命令窗口自动关闭。我的
.bat
文件通常以
choice/t60/cy/dy/n
结束,以便我可以看到命令的输出。

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

cmd /K cd "$(CURRENT_DIRECTORY)" && python "$(FULL_CURRENT_PATH)" 
假设您已经设置了路径,或者您可以使用C:\Python27\python.exe或python二进制文件的路径,并且您将在python所在的文件夹中运行python。您还可以通过单击按钮
save…
将此命令保存到快捷方式

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

尝试以下操作:

cmd /k cd /d $(CURRENT_DIRECTORY) && python $(FULL_CURRENT_PATH)

命令行的问题是,
$(完整\u当前\u路径)
本身没有引号。例如,如果其值是
“c:\f\x y z\w.exe”
,则如果没有引号,它将被解释为
“c:\f\x”“y”“z\w.exe”“
。不过,您是对的,使用
/d
标志可能是一个好主意。@causterite,不是。CHDIR(即CD)是一个有趣的命令,它对空格的解释不同。命令“CD/?”的输出包括“CHDIR”命令,该命令不将空格视为分隔符,因此可以将其放入包含空格的子目录名称中,而不在名称周围加引号。”
$(完整当前路径)
不用作
CD
的参数。
cd
命令在
&
处结束,因此这种“以不同方式解释空格”的行为不适用于
&
之后的命令。我将突出显示
cd
中的
\d
选项。必须在windows中更改驱动器的同时更改目录。每个驱动器都有自己的当前目录。例如,如果您在
C:\tmp
中说
cdv:\tmp
您当前的工作目录仍然是
C:\tmp
。相反,如果您说
cd/d V:\tmp
,您当前的工作目录将是
V:\tmp