Notepad++ NppExec-将文件移动到另一个与子文件夹结构相关的文件夹

Notepad++ NppExec-将文件移动到另一个与子文件夹结构相关的文件夹,notepad++,nppexec,Notepad++,Nppexec,我正在使用Notepad++编写我的SA:MP服务器系统,但我在组织文件夹时遇到了一个问题:我想将编译后的文件(.amx-类似于非典当开发者的.exe)放在一个名为bin的单独文件夹中,其子文件夹结构与源文件夹(src)相同 对于澄清,所需的文件夹结构如下: Root folder ├── src │ ├── filterscripts │ │ ├── file1.pwn │ │ └── file2.pwn │ └── gamemodes │ └── gm_m

我正在使用Notepad++编写我的SA:MP服务器系统,但我在组织文件夹时遇到了一个问题:我想将编译后的文件(.amx-类似于非典当开发者的.exe)放在一个名为
bin
的单独文件夹中,其子文件夹结构与源文件夹(
src
)相同

对于澄清,所需的文件夹结构如下:

Root folder
├── src
│   ├── filterscripts
│   │   ├── file1.pwn
│   │   └── file2.pwn
│   └── gamemodes
│       └── gm_main.pwn
├── bin
│   ├── filterscripts
│   │   ├── file1.amx
│   │   └── file2.amx
│   └── gamemodes
│       └── gm_main.amx
我想要的是,当我编译一个.pwn文件时,生成的.amx应该转到相应的原始子文件夹,但在
bin

我当前的执行脚本如下:

NPP_SAVE
cd $(CURRENT_DIRECTORY)
"C:\Pawn\bin\samp\pawncc.exe" "$(FILE_NAME)" -; -(

只有使用NppExec才能做到这一点吗?

您可以使用此NppExec脚本来派生所需的路径,并将它们输入到编译器的某些参数中:

NPP_SAVE
echo Sourcefile         : $(FULL_CURRENT_PATH)

// ---------------------------------------------------------------------------------
// -- use string function to get ROOT and SRC path and then BIN path:

//  set <var> ~ strrfind <s> <t> - returns the LAST position of <t> in <s>
set Pos_Root ~ strrfind $(FULL_CURRENT_PATH) \src\
//  set <var> ~ <math expression> - calculates the math expression
set Pos_Src ~ $(Pos_Root) + 4
// echo $(Pos_Src), $(Pos_Root)

//   returns the substring
set Dir_Root ~ substr 0 $(Pos_Root) $(FULL_CURRENT_PATH)
set Dir_Src ~ substr 0 $(Pos_Src) $(FULL_CURRENT_PATH)
echo Src-Directory      : $(Dir_Src)
echo Project-Directory  : $(Dir_Root)

set Dir_Bin = $(Dir_Root)\bin
echo Bin-Directory      : $(Dir_bin)

// -- Now use the previously determined substring to get the BIN path and then
// -- derive the Target path with src replace by bin 

// get the target dir:
// set <var> ~ strreplace <s> <t0> <t1> - replaces all <t0> with <t1>
set TARGET_PATH ~ strreplace $(CURRENT_DIRECTORY) $(Dir_Src) $(Dir_Bin)
echo Target-Directory   : $(TARGET_PATH)

// ----------------------------------

// use compile with $(FULL_CURRENT_PATH) and $(TARGET_PATH)
"C:\Pawn\bin\samp\pawncc.exe" $(FULL_CURRENT_PATH) whatever-output-option $(TARGET_PATH)
NPP\u保存
回声源文件:$(完整\u当前\u路径)
// ---------------------------------------------------------------------------------
//--使用字符串函数获取根和SRC路径,然后获取BIN路径:
//set~strrfind-返回中的最后一个位置
设置Pos\u Root~strrfind$(完整当前路径)\src\
//set~-计算数学表达式
设置Pos_Src~$(Pos_Root)+4
//echo$(Pos\u Src),$(Pos\u Root)
//返回子字符串
设置目录根~substr 0$(位置根)$(完整当前路径)
set Dir\u Src~substr 0$(Pos\u Src)$(完整当前路径)
echo Src目录:$(Dir\u Src)
echo项目目录:$(目录根)
set Dir\u Bin=$(Dir\u Root)\Bin
echo Bin目录:$(Dir\u Bin)
//--现在使用先前确定的子字符串获取BIN路径,然后
//--使用src替换为bin来派生目标路径
//获取目标目录:
//set~strreplace-将所有内容替换为
设置目标路径~strreplace$(当前目录)$(目录Src)$(目录Bin)
回显目标目录:$(目标路径)
// ----------------------------------
//使用带有$(完整当前路径)和$(目标路径)的编译
“C:\Pawn\bin\samp\pawncc.exe”$(完整\u当前\u路径)任何输出选项$(目标\u路径)
注释

  • NppExec文档解释了所有不同的
    set
    可能性,请查看它们
  • 动态派生路径的替代方法是静态定义路径:
    • 将“路径设置”作为根、BIN、SRC等的静态路径放置在NppExec脚本中
    • 将路径定义为从NppExec脚本访问的环境变量
    • 另一种完全不同的方法是存储几个
      $(完整当前路径)
      ,并在以下目录之间进行一些更改:
    • 一张cd。。从src subdir跳转到src
    • 扎根
    • 垃圾桶
    • 然后进行字符串替换

1。您不需要将cd刻录到
$(当前目录)
。你已经在那里了。2.什么是当前目录?是src吗?我想它是src\filterscript,您需要以某种方式从当前目录中取出该部分,这样您就可以使用
。\..\bin\MAGIC
,其中的“MAGIC being”派生自当前目录。对吗?我想当前的目录就是当前打开的文件所在的目录。默认情况下,NppExec启动时指向的目录是notepad++.exe所在的文件夹。关于第二个问题:exacly。我只需要将
src\filterscript
src\gamemodes
转换为
bin\filterscript
bin\gamemodes
。让我考虑几分钟。请注意,标记引用了Windows命令提示符,因此请更正…我有一个错误:
root\u folder\bin\gamemodes.p(0):致命错误100:无法从文件中读取:“root\u folder\bin\gamemodes.p”
函数似乎吃掉了扩展名的最后两个字母(应该是.pwn)@Vico,然后您必须找出发生了什么。回显所有变量并找出抛出错误的行。唯一能让我真正读懂某个东西的一行是编译器命令的最后一行。该行使用
$(完整当前路径)
。所以我不知道是哪一行给了你这个错误。只是一些想法:
root\u folder\bin\gamemodes
:你在
bin
中创建了子文件夹吗?它们是可读写的吗?如果在cmd窗口中逐字发出nppexec使用的相同编译命令,会发生什么情况?是的,子文件夹已创建,并且已授予读写权限。还有一件事在这行:
set TARGET\u PATH~strreplace$(当前目录)$(Dir\u Src)$(Dir\u Bin)
我看到您实际上反转了Dir参数。翻转它们会为pawncc提供正确的输入文件夹(src,而不是bin),但仍然没有捕获扩展名的最后两个字母。