从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 "$(FULL_CURRENT_PATH)"</Command>
我不想额外的代码添加到Python脚本来改变当前工作目录,通常情况下这是不需要的。
我一直在试图解决这个问题,并提出以下几点。该行位于NPP文件夹中的“shortcuts.xml”中。
<Command name="Run This File" Ctrl="yes" Alt="no" Shift="no" Key="116">cmd /K "cd "$(CURRENT_DIRECTORY)" && "$(FULL_CURRENT_PATH)""</Command>
所以你关闭核电站,加入这一行,使用其他编辑器编辑“shortcuts.xml”,然后启动核电站。 要运行该文件,请使用Ctrl + F5组合键。
这适用于Windows 10,但在Windows XP中失败。
我该如何调整它在Windows XP中的工作?
我的猜测是问题是命令中嵌套不正确的引号;我不确定为什么它会在后来的Windows上工作,而在XP上失败。
命令
cmd /K "cd "$(CURRENT_DIRECTORY)" && "$(FULL_CURRENT_PATH)""
代表
cmd /K "cd "$(CURRENT_DIRECTORY)" && "$(FULL_CURRENT_PATH)""
即使从语法高亮,你可以看到,报价不引用你的期望。
为了获得预期的效果,你可以使用这个命令:
cmd /K cd "$(CURRENT_DIRECTORY)" ^&^& "$(FULL_CURRENT_PATH)"
:: XML-ified:
cmd /K cd "$(CURRENT_DIRECTORY)" ^&^& "$(FULL_CURRENT_PATH)"
我从记事本上运行多个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 "cd /d $(CURRENT_DIRECTORY) && $(FULL_CURRENT_PATH)"</Command>
随着.bat
作为当前的文件,然后我用菜单=>运行 =>CD和运行文件。
问题中显示的命令行似乎有太多符号"
。当前目录包含驱动器说明符,因此CD
需要\D
选项。
我使用的命令启动cmd \C ...
(而不是问题中的\K
),因此命令窗口自动关闭。我的.bat
文件通常以choice /t 60 /C Y /d Y /n
完成,所以我可以看到命令的输出。
记事本++> F5(运行)>然后键入以下命令
cmd /K cd "$(CURRENT_DIRECTORY)" && python "$(FULL_CURRENT_PATH)"
假定已经设置了路径,或可以使用C:\ Python27 \ python.exe或者蟒二进制文件的路径,并您将在python所在的文件夹中运行python。您还可以通过单击按钮Save...
将此命令保存为快捷方式。
之后,您还可以在工具栏>运行>修改快捷/删除命令中修改命令。
你的命令行的问题是'$(FULL_CURRENT_PATH)'没有被引用。例如,如果它的值是''c:\ f \ xyz \ w.exe“',那么没有引号就会被解释为'”c:\ f \ x“”y“”z \ w.exe “'。不过你说得对,使用'/ d'标志可能是一个好主意。 – Cauterite
@Cauterite,No.CHDIR(即CD)是一个有趣的命令,它不同地解释空间。命令“CD /?”的输出包含*“CHDIR命令不会将空格视为分隔符,因此可以将CD转换为包含空格的子目录名称,而不包含名称带引号”*“的空格。 – AdrianHHH
'$(FULL_CURRENT_PATH)'不用作'cd'的参数。 'cd'命令在'&&'结束,所以这个“不同的空间解释”行为不适用于'&&'之后的命令。 – Cauterite