首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Script-Fu解析出基本文件名

如何使用Script-Fu解析出基本文件名
EN

Stack Overflow用户
提问于 2009-09-06 18:09:27
回答 6查看 6.9K关注 0票数 11

使用从gimp.org下载的Gimp 2.6.6 for MAC (在X11下)。

我正在尝试使用Script-Fu自动化一个无聊的手动过程。我需要解析图像文件名,以便使用原始文件名上的后缀将不同的层保存为新文件。

我最初的尝试是这样的,但失败了,因为(string-search ...)似乎在2.6版本下不可用(对脚本引擎的更改?)

代码语言:javascript
运行
复制
(set! basefilename (substring filename 0 (string-search "." filename))) 

然后,我尝试使用正则表达式使用this information解析出基本文件名,但(re-match-nth ...)也无法识别。

代码语言:javascript
运行
复制
(if (re-match "^(.*)[.]([^.]+)$" filename buffer)
    (set! basefilename (re-match-nth orig-name buffer 1))
    )

虽然没有错误地将值从向量ran中提取出来,但是当将结果值传递到(string-append ...)中时,结果值不会被视为字符串。

代码语言:javascript
运行
复制
(if (re-match "^(.*)[.]([^.]+)$" filename buffer)
    (set! basefilename (vector-ref buffer 1))
    ) 

所以我想我的问题是,我该如何解析出基本文件名?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-09-30 09:48:53

上下文

GIMP 2.6.6 Windows Vista SP2

目标

提取原始文件名的基名,不带其扩展名。

症状

错误: eval:未绑定变量:重新匹配-第n次

可能的建议

GIMP菜单"Filters“> "Script-Fu”> "Console

在输入框中,粘贴以下Script-Fu函数定义,然后按ENTER键:

代码语言:javascript
运行
复制
(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

要测试该函数,请输入:

代码语言:javascript
运行
复制
(filename-basename "screen.xcf")

Script-Fu控制台回答:

代码语言:javascript
运行
复制
"screen"
票数 6
EN

Stack Overflow用户

发布于 2010-06-07 01:08:14

不是一个真正正确的解决方案:

(filename-basename "this.is.a.long.filename.jpg")

“这个”

更好的实现:

代码语言:javascript
运行
复制
(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)
  )
 )
)
票数 8
EN

Stack Overflow用户

发布于 2012-06-10 12:19:31

我的版本将文件名(f)分成由分隔符(".“)分隔的部分。在这种情况下);删除最后一部分;并再次使用分隔符重新组合它们

代码语言:javascript
运行
复制
(define (pc-drop-extension f) 
  (unbreakupstr (butlast (strbreakup f ".")) ".")  )

所以

代码语言:javascript
运行
复制
(pc-drop-extension "ab.cd.efi") -> "ab.cd"

代码语言:javascript
运行
复制
(pc-drop-extension "ab/cd.ef/ghi.jkl.mno") -> "ab/cd.ef/ghi.jkl"
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1386293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档