我有一个批处理文件,它基本上可以找到文件夹中的所有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"
答案 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
保存前缀的长度(字符数),因为没有内置函数来获取它。