我有一批格式相同的文件说bmp
,文件名是0.bmp
1.bmp
... 99.bmp
,我想更改文件名,例如0.bmp
至99.bmp
,1.bmp
至98.bmp
等,emacs可以在dired-mode
执行此操作吗?我在Windows下使用emacs。
答案 0 :(得分:7)
您可以使用 M-x wdired-change-to-wdired-mode 使可编辑缓冲区可编辑。之后,一个带有a counter的简单键盘宏,从dired缓冲区的末尾开始,应该可以帮到你了。
如果您不想使用宏,则替代方案是:
M-x replace-regexp
Replace regexp: ^[0-9]+
Replace regexp with \,(- 99 \#&)
答案 1 :(得分:2)
可能是一个快速的肮脏答案,而非通用:
首先:dired-mode
中的 C-x C-q ;
第二: M - : yank和 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)))
第三: C-c C-c 保存更改,并完成。
答案 2 :(得分:1)
我不确定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*
缓冲区,并且过去表达式推送 Cx Ce ,那么该代码将为您完成。