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 "$(FULL_CURRENT_PATH)"</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 "cd "$(CURRENT_DIRECTORY)" && "$(FULL_CURRENT_PATH)""</Command>
Run Code Online (Sandbox Code Playgroud)
所以你关闭 NPP,通过添加这一行来编辑“ shortcuts.xml ”,使用另一个编辑器,然后启动 NPP。要运行该文件,请使用Ctrl+F5组合键。
这在 Windows 10 中有效,但在 Windows XP 中失败。
如何调整它以在 Windows XP 中工作?
尝试这个:
cmd /k cd /d $(CURRENT_DIRECTORY) && python $(FULL_CURRENT_PATH)
Run Code Online (Sandbox Code Playgroud)
我的猜测是问题是命令中嵌套的引号不正确;我不确定为什么它在以后的 Windows 上可以工作,而在 XP 上却失败。
命令
cmd /K "cd "$(CURRENT_DIRECTORY)" && "$(FULL_CURRENT_PATH)""
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 "$(CURRENT_DIRECTORY)" ^&^& "$(FULL_CURRENT_PATH)"
Run Code Online (Sandbox Code Playgroud)