使用从gimp.org下载的Gimp 2.6.6 for MAC (在X11下)。
我正在尝试使用Script-Fu自动化一个无聊的手动过程。我需要解析图像文件名,以便使用原始文件名上的后缀将不同的层保存为新文件。
我最初的尝试是这样的,但失败了,因为(string-search ...)似乎在2.6版本下不可用(对脚本引擎的更改?)
(set! basefilename (substring filename 0 (string-search "." filename))) 然后,我尝试使用正则表达式使用this information解析出基本文件名,但(re-match-nth ...)也无法识别。
(if (re-match "^(.*)[.]([^.]+)$" filename buffer)
(set! basefilename (re-match-nth orig-name buffer 1))
)虽然没有错误地将值从向量ran中提取出来,但是当将结果值传递到(string-append ...)中时,结果值不会被视为字符串。
(if (re-match "^(.*)[.]([^.]+)$" filename buffer)
(set! basefilename (vector-ref buffer 1))
) 所以我想我的问题是,我该如何解析出基本文件名?
发布于 2009-09-30 09:48:53
上下文
GIMP 2.6.6 Windows Vista SP2
目标
提取原始文件名的基名,不带其扩展名。
症状
错误: eval:未绑定变量:重新匹配-第n次
可能的建议
GIMP菜单"Filters“> "Script-Fu”> "Console“
在输入框中,粘贴以下Script-Fu函数定义,然后按ENTER键:
(define (filename-basename orig-name)
(car (strbreakup orig-name "."))
; Nimmzo 09/09/30: the string split function strbreakup is defined
; in the compatibility file from SIOD to TinyScheme:
; C:\Program Files\GIMP\share\gimp\2.0\scripts\script-fu-compat.init
) ; end filename-basename要测试该函数,请输入:
(filename-basename "screen.xcf")Script-Fu控制台回答:
"screen"发布于 2010-06-07 01:08:14
不是一个真正正确的解决方案:
(filename-basename "this.is.a.long.filename.jpg")
“这个”
更好的实现:
(define (morph-filename orig-name new-extension)
(let* ((buffer (vector "" "" "")))
(if (re-match "^(.*)[.]([^.]+)$" orig-name buffer)
(string-append (substring orig-name 0 (car (vector-ref buffer 2))) new-extension)
)
)
)发布于 2012-06-10 12:19:31
我的版本将文件名(f)分成由分隔符(".“)分隔的部分。在这种情况下);删除最后一部分;并再次使用分隔符重新组合它们
(define (pc-drop-extension f)
(unbreakupstr (butlast (strbreakup f ".")) ".") )所以
(pc-drop-extension "ab.cd.efi") -> "ab.cd"和
(pc-drop-extension "ab/cd.ef/ghi.jkl.mno") -> "ab/cd.ef/ghi.jkl"https://stackoverflow.com/questions/1386293
复制相似问题