批处理脚本以交换单词/重命名文件

xcooba

有人可以帮我吗?我有Win XP和一堆像这样的电子书:

标题-名称Surname.mobi,我需要一个BAT文件才能获得:姓氏-Title.mobi

我几乎可以交换破折号前后的内容(除了解决空格)。但是我不知道如何交换名字和姓氏。我走了这么远,但这只是第一次交换。也许一些正则表达式会很好..谢谢你,xcooba

回显FOR / f“ tokens = 1,2,3 delims =-”。%% G IN('dir / b')会“ %% G-%% H。%% I”“ %% H-%% G。%% I”
暂停

德本纳姆

名称包含两个以上的部分是很常见的。通常,只有一个姓,但该姓可能具有嵌入式连字符。姓氏之前可能有2个或更多名称。

期望标题可能带有连字符也不是没有道理的。

因此,您的解析器需要能够正确区分。正则表达式会派上用场,但是本机Windows批处理文件对regex没有很好的支持。

批处理解决方案可能同时涉及FOR循环和延迟扩展。但是,如果!在启用延迟扩展时包含FOR变量,则FOR变量在扩展时会损坏,并!可能出现在标题中。延迟扩展可以根据需要在循环中打开和关闭。

下面将正确处理一个名称,例如
“ Some title!-标题的第二部分-Name1 Name2 Surname1-Surname2.mobi”

,并将其重命名为
Surname1-Surname2 Name1 Name2-Some title!-title.mobi的第二部分”

@echo off
setlocal disableDelayedExpansion
for /f "delims=" %%F in ('dir /b /a-d "* - * *.mobi"') do (

  %== Change to root folder so path of current directory is empty ==%
  pushd \

  %== Separate fileName from extension ==%
  set "fileName=%%~nF"
  set "ext=%%~xF"

  %== Separate Title from full name. Assume everything before final " - " is Title ==%
  setlocal enableDelayedExpansion
  for /f "delims=" %%A in ("!fileName: - =\!") do (
    endlocal
    set "name=%%~nxA"
    set "title=%%~pA"
  )

  %== Separate Surname from Name. Assume Surname is after final space ==%
  setlocal enableDelayedExpansion
  for /f "delims=" %%A in ("!name: =\!") do (
    endlocal
    set "surname=%%~nxA"
    set "name=%%~pA"
  )

  %== Strip leading and trailing \ from name and title ==%
  setlocal enableDelayedExpansion
  set "name=!name:~1,-1!"
  set "title=!title:~1,-1!"

  %== Rename file, restoring spaces in Name and " - " in Title ==%
  ren "!fileName!!ext!" "!surname! !name:\= ! - !title:\= - !!ext!"
  endlocal

  popd
)


体面的正则表达式工具使生活变得更加轻松。我编写了一个名为REPL.BAT的混合JScrip / batch实用程序,该实用程序执行正则表达式搜索并替换stdin并将结果写入stdout。它是纯脚本,它将在XP以后的任何Windows计算机上运行。完整的文档嵌入在脚本中。

使用REPL.BAT,解决方案变为:

@echo off
for /f "delims=" %%A in (
  'dir /b /a-d "* - * *.mobi" ^| repl "(.*) - (.*) (.*)(\.mobi)$" "ren \q$&\q \q$3 $2 - $1$4\q" x'
) do %%A


请注意,在不破坏文件名的情况下,您不能多次运行任何一个脚本。重命名文件时,将文件移动到新位置可能更安全。MOVE命令可以重命名并一步移动。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

制作DOS批处理脚本以在文件单词之间重命名

构建DOS批处理脚本以重命名文件

批处理脚本以使用内容重命名PDF文件

需要帮助完成批处理脚本以重命名文件

批处理脚本以批量重命名文件-去除括号和之间的所有字符

批处理脚本以递归方式移动.txt文件并重命名它们以替换特定字符

批处理文件重命名脚本交换文件名中的子字符串?

使用批处理脚本重命名文件夹

如何使用批处理脚本使用模式重命名文件

仅使用批处理脚本重命名文件夹

使用批处理脚本旋转重命名编号文件

批处理脚本以更改txt文件

批处理文件重命名与Python

重命名文件模式Windows批处理

如何重命名批处理文件

如何使用批处理脚本重命名多个文件夹和子文件?

用于重命名子文件夹中文件的批处理脚本

用于复制和重命名文件的批处理脚本文件

使用Windows cmd或批处理脚本按照条形码重命名文件

使用批处理脚本重命名目录中的多个文件

在使用 ghostscript 批处理脚本解锁 PDF 之前重命名文件

Winrar批处理脚本(略有改动)-将提取的文件重命名为当前目录

根据内容标准重命名大量 txt 文件(批处理脚本帮助)

Windows批处理脚本重命名具有随机名称的文件?

使用 bash 脚本,如何连接文本以重命名文件?

批处理+ Powershell脚本重命名器错误的目录错误

Linux批处理音乐目录重命名脚本/命令(bash)

在批处理脚本中使用 WMIC 重命名 PC 的问题

批处理脚本以删除特定的文件夹