MS Batch,按 Excel 或 CSV 列表中的模式重命名文件

问题描述 投票:0回答:3

我的文件名称如下:

foo_baar_AB_01.ending
fOo_BaAr_BC_05.ending
FOo_baaR_BA_15.ending

以及带有重命名文件规则集的 Excel 或 CSV 列表:

AB ; Data
BC ; Stuff
BA ; Other

我的任务是重命名文件。结果应该如下所示:

foo_baar_AB_01.Data.ending
fOo_BaAr_BC_05.Stuff.ending
FOo_baaR_BA_15.Other.ending

是否有解决方案可以将 Exel-Pattern-List 集成到批处理文件中,或者我是否必须将 Pattern-List 集成到批处理文件中?这个问题的解决方案是什么?

windows batch-file cmd batch-rename
3个回答
1
投票
@echo off
setlocal EnableDelayedExpansion

rem Load the list of names from the ruleset
for /F "tokens=1,2 delims=; " %%a in (list.csv) do (
   set "name[%%a]=%%b"
)

rem Process the files
for /F "tokens=1-5 delims=_." %%a in ('dir /B /A-D *.ending') do (
   ECHO ren "%%a_%%b_%%c_%%d.%%e" "%%a_%%b_%%c_%%d.!name[%%c]!.%%e"
)

确认名称正确后,从

ECHO
命令中删除
ren
部分。


1
投票

嵌套

for
循环可以在这里发挥作用——请参阅解释性
rem
备注:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem // Define rule-set CSV file here:
set "RULES=%~dp0ruleset.csv"

rem // Resolve the files to rename, provided as command line arguments:
for %%F in (%*) do (
    rem // Extract the third `_`-delimited token from file name:
    for /F "tokens=3 delims=_" %%N in ("%%~nF") do (
        rem // Read the rule-set CSV file (`delims=;<TAB><SPACE>`!):
        for /F "usebackq tokens=1,* delims=;     " %%I in ("%RULES%") do (
            rem // Check whether third token from file name matches rule:
            if /I "%%I"=="%%N" (
                rem // File name matches, so rename file finally:
                ECHO rename "%%~F" "%%~nF.%%J%%~xF"
            )
        )
    )
)

endlocal
exit /B

这肯定不是最高效、最高效的方法,但它很容易理解。

测试输出后,删除

ECHO
前面的大写
rename
命令。


0
投票

这是一个 excel 宏,可以做你想要的事情。在您的 Excel 文件中,将规则放入名为 rules 的工作表中,如下所示:

COLUMN A   COLUMN B 
    AB      Data
    BC      Stuff

更改宏行中的文件路径

Set objFolder = objFSO.GetFolder("C:\\\\files")

并运行宏。希望有帮助。

    Sub renameFiles()
    Dim objFSO As Object
    Dim objFolder As Object
    Dim objFile As Object

    Set rulesSheet = ActiveWorkbook.Worksheets("rules")
    'Create an instance of the FileSystemObject
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'Get the folder object
    Set objFolder = objFSO.GetFolder("C:\\files")
    'loops through each file in the directory
    For Each objFile In objFolder.Files
        Filename = objFile.Path
        ' loop ruleset
        rulesrow = 1
        Do While (rulesSheet.Cells(rulesrow, 1) <> "")
            rule = Trim(rulesSheet.Cells(rulesrow, 1))
            newtext = Trim(rulesSheet.Cells(rulesrow, 2))
            pos = InStr(Filename, rule)
            If pos > 0 Then ' if the rule exists in your file name
                newfilename = objFSO.getparentfoldername(Filename) & "\" & objFSO.GetBaseName(Filename) & "." & newtext & "." & objFSO.getextensionname(Filename)
                ' rename
                Name Filename As newfilename
            End If
            rulesrow = rulesrow + 1
        Loop
    Next objFile
    End Sub
© www.soinside.com 2019 - 2024. All rights reserved.