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

Batch Script Renaming File Prefix

我有一个批处理文件,它基本上可以找到一个文件夹中的所有 pdf 文件,并给它们一个前缀。所以示例: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"

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

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保存前缀的长度(字符数),因为没有内置函数来获取它。

使用 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 regular expression file renaming utility 让事情变得更简单。它是纯脚本(混合 JScript/batch),可以在任何 Windows XP 以后的机器上本地运行。脚本中嵌入了完整的文档。

以下命令(针对命令行)假定 JREN.BAT 位于您的 PATH 中列出的文件夹中。

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

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