首页 > 解决方案 > 搜索文件标题并相应地重命名文件

问题描述

我们有几个文件名随机的文件。对于每个文件,我们必须使用记事本打开它并转到包含报告标题的第 1 行,例如“PAST DUE REPORT 1”。然后关闭并将文件重命名为 PAST DUE REPORT 1。这太耗时了,想知道批处理脚本是否可以帮助自动化此过程。

例如:

在“C:\FILES”中,我有 FILE1、FILE2 和 FILE3。这些文件不是任何特定格式的,因此批处理脚本必须搜索所有文件格式。

如果第 1 行存在关键字“PAST DUE REPORT 1”,则将文件重命名为“PAST DUE REPORT 1”并将其移至“C:\REPORTS”。重复直到每个文件被重命名和移动。

我也愿意接受其他建议。

------ 已编辑 ------

这是其中一个文件的实际示例。

NOTICE OF PAST DUE PAYMENT on MM/DD/YYYY for Account 123 Loan 0005

Your auto loan 2010 Toyota Sienna payment due on MM/DD/YY is 14 days past due. The standard payment is $200.00.  The total past due is $200.00. The late charge is $15.00.

标签: batch-filerename

解决方案


我不完全知道,你的第一行是什么,但也许批次可能看起来像这样:

for %%F in (C:\FILES\*.*) do call :renamefile "%%~fF"
exit
:renamefile {String} file
set /p "firstLine=<%~1"
echo/%firstLine%|findstr /i /c:"PAST DUE REPORT"||exit/B
::Without knowing more about the first line, I can't set the correct name
set "newName=%firstLine%"
ren %1 "%newName%"
move "%~dp1%newName%" "C:\REPORTS"

也许我在自己的项目中经常使用的这个功能也可以提供帮助:

:createUniqueName {String} file
set "return=%~f1"
if not exist "%~f1" exit /B 0
set /a i=0
:_createUniqueName
set /a i+=1
set "return=%~dpn1 (%i%)%~x1"
if exist "%return%" goto _createUniqueName
exit /b %i%

推荐阅读