我有一批格式相同的文件,比如说bmp
格式,文件名为0.bmp
1.bmp
… 99.bmp
。我想要更改这些文件名,比如将0.bmp
改为99.bmp
,将1.bmp
改为98.bmp
等等。在dired-mode
下,Emacs能够实现这个功能吗?我使用的是Windows系统下的Emacs。
我有一批格式相同的文件,比如说bmp
格式,文件名为0.bmp
1.bmp
… 99.bmp
。我想要更改这些文件名,比如将0.bmp
改为99.bmp
,将1.bmp
改为98.bmp
等等。在dired-mode
下,Emacs能够实现这个功能吗?我使用的是Windows系统下的Emacs。
M-x replace-regexp
Replace regexp: ^[0-9]+
Replace regexp with \,(- 99 \#&)
0.bmp
转换为1.bmp
。操作者想要将0转换为99,1转换为98等。可以通过类似的更改正则表达式计算来完成,但是要改为(- 99 \#&)
。 - Diego Sevillaemacs-lisp
了解很少。 - toolchainX可能是一个快速且不太通用的答案:
首先,在dired-mode
下按C-x C-q;
其次,按M-:,然后粘贴代码片段并按 RET:
(progn
(beginning-of-buffer)
(while (re-search-forward "\\([0-9]+\\).bmp" nil t)
(replace-match
(format "%d.bmp" (- 99 (string-to-number (match-string 1))))
nil
nil)))
我不确定 dired-mode
,但你可以在 *scratch*
缓冲区中执行一个简单的脚本。由于你要用不同的名称替换现有的文件名,我建议你先对所有文件进行第一次重命名,然后再从这些名称开始:
(progn
(dotimes (i 100)
(let ((file-name (concat (number-to-string i) ".bmp")))
(rename-file file-name (concat "old" file-name))))
(dotimes (i 100)
(let ((file-name-old (concat "old" (number-to-string i) ".bmp"))
(file-name-new (concat (number-to-string (- 99 i)) ".bmp")))
(rename-file file-name-old file-name-new))))
*scratch*
缓冲区中,然后粘贴表达式并按下C-x C-e,那么该代码将为您执行此操作。