批处理脚本重命名文件前缀



我有一个批处理文件,它基本上找到文件夹中的所有pdf文件,并给它们一个前缀。SO示例:file1.pdf &file2.pdf。当批处理文件运行时,它会为每个文件添加一个前缀,比如"new"。New - file1.pdf,New - file2.pdf .

我不确定如何得到这个检查,看看这个文件是否已经包含这个前缀,如果为真,跳过它。下面是我当前的代码:

set strPrefix=New - 
set fname=*.pdf
for %%f in (%fname%) Do echo Rename file "%%f" to "%strPrefix%%%f"
for %%f in (%fname%) Do ren "%%f" "%strPrefix%%%f"

使用DIR/B列出文件,并将结果管道到FINDSTR以删除已经具有前缀的文件。使用FOR/F(而不是简单的FOR)处理结果

@echo off
setlocal
set "prefix=New - "
set "mask=*.pdf"
for /f "eol=: delims=" %%F in (
  'dir /b "%mask%" ^| findstr /vibc:"%prefix%"'
) do ren "%%F" "%prefix%%%F"

或者您可以使用我的JREN.BAT正则表达式文件重命名实用程序来更简单地完成任务。它是纯脚本(JScript/批处理的混合),可以在XP以后的任何Windows机器上本机运行。完整的文档嵌入在脚本中。

下面的命令(用于命令行)假设JREN.BAT位于PATH中列出的文件夹中。

jren "^" "New - " /fm "*.pdf" /fx "New - *"

如果将命令放在批处理脚本中,则使用CALL JREN

以下代码提取文件名的开头,并将其与预定义的前缀(以不区分大小写的方式)进行比较:

set "strPrefix=New - "
set lenPrefix=6
set fname=*.pdf
setlocal EnableDelayedExpansion
for %%F in (%fname%) do (
  set "file=%%~nxF"
  if /i not "!file:~0,6!"=="%strPrefix%" (
    ren "%%~fF" "%strPrefix%%%~nxF"
  )
)
endlocal

变量lenPrefix保存前缀的长度(字符数),因为没有内置函数来获取它。

最新更新