我们有几个文件带有随机文件名。对于每个文件,我们必须使用记事本打开它,然后转到包含报告标题的第1行,例如“ PAST DUE REPORT 1”。然后关闭并将文件重命名为PAST DUE REPORT1。这太耗时,并且想知道批处理脚本是否可以帮助自动执行此过程。
例如:
在“ 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.
答案 0 :(得分:0)
我不确定,您的第一行内容是什么,但是批处理可能看起来像这样:
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%