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

时间:2015-08-10 14:23:27

标签: windows batch-file renaming

我有一个批处理文件,它基本上可以找到文件夹中的所有pdf文件,并为它们提供前缀。例如:file1.pdf& file2.pdf。当批处理文件运行时,它会添加一个前缀,让每个文件说“新”。 New - file1.pdf& New - file2.pdf

我不确定如何检查此文件是否已包含此前缀,如果为true则跳过它。 这是我目前的代码:

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"

2 个答案:

答案 0 :(得分:2)

使用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 /批处理),可以在XP之后的任何Windows机器上本机运行。完整的文档嵌入在脚本中。

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

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

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

答案 1 :(得分:0)

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

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