2016-09-28 78 views
-1

我的文檔與名稱類似:MS批次,通過模式在Excel或CSV名單重命名文件

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的圖案列表或我必須在批處理文件的模式列表集成?而這個問題的解決方案是什麼?

+1

請您確認清單格式;一個CSV應該有這樣的行,''「AB」,「數據」'。如果您不想查找excel/VBA解決方案,則此文件格式等信息至關重要。 – Compo

回答

2
@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" 
) 

確認後,該名稱是正確的,去掉部分ECHOren命令。

+0

非常感謝你 – chris

0

這裏是一個excel宏,做你想做的。在Excel文件把規則命名規則像這樣的表:

COLUMN A COOLUMN B 
    AB  Data 
    BC  Stuff 

更改文件路徑宏行設置objFolder = objFSO.GetFolder(「C:\\文件」)。並運行宏。希望能幫助到你。

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 
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 

這是肯定不是最高效和有效的方法,但它是很容易理解。

在測試完輸出之後,在rename前刪除大寫ECHO命令。