重新排列Emacs中的文件名

时间:2012-12-11 08:35:16

标签: windows emacs file-rename dired

我有一批格式相同的文件说bmp,文件名是0.bmp 1.bmp ... 99.bmp,我想更改文件名,例如0.bmp99.bmp1.bmp98.bmp等,emacs可以在dired-mode执行此操作吗?我在Windows下使用emacs。

3 个答案:

答案 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 ,那么该代码将为您完成。