2014-12-27 134 views
0

我有數百個文件與名稱替換前綴和後綴使用批處理

MUZ-123456-KH.txt

我想更換PREFIX後綴來代替這種類型的文件名

muz123456.txt

的意思是: 前綴MUZ-MUZ

後綴-KH替換被替換沒有

我有一個工具,它需要大量的時間。誰能幫我?

其日常工作和我厭倦了

+0

約你要解決這個問題更清楚。你想重命名文件系統中的文件還是在包含名稱列表的文本文件中更改它們的名稱。你在做什麼系統?文件是在一個目錄還是許多不同的目錄中。 etc .. – 2014-12-27 19:23:58

+0

所有這些.txt文件只能放在一個目錄中(名稱:Muzaffar)。我只想替換文件名,因爲我提到在上面的查詢 – muzaffar 2014-12-27 19:39:04

+0

可能重複[替換文件名在同一目錄根據項目要求](http://stackoverflow.com/questions/27674887/replace-filename-in-same-directory -according-to-project-requirement) – DavidPostill 2014-12-28 12:34:22

回答

0

您可以使用匹配的文件模式(與DIR命令)和文本替換(與SET命令)的組合做到這一點。

我添加了註釋來解釋每個步驟正在做什麼。

@ECHO OFF 
SETLOCAL EnableExtensions EnableDelayedExpansion 

REM Process all files matching the pattern. 
FOR /F "usebackq tokens=* delims=" %%A IN (`DIR /B /S "C:\Path\To\Files\MUZ-*-KH.txt"`) DO (
    ECHO Processing: %%~A 

    REM Get just the file name. 
    SET NewName=%%~nxA 
    REM Replace prefix. 
    SET NewName=!NewName:MUZ-=muz! 
    REM Replace suffix. 
    SET NewName=!NewName:-KH=! 

    ECHO Renaming to: !NewName! 

    REM Rename the file. 
    RENAME "%%~fnxA" "!NewName!" 

    ECHO. 
) 

ENDLOCAL 
+0

謝謝大家 – muzaffar 2014-12-28 05:28:03

0

在假設文件遵循以下格式:

prefix dash datawithnodash dash suffix . txt 
@echo off 
    setlocal enableextensions disabledelayedexpansion 

    set "prefix=MUZ" 
    set "suffix=KH" 
    set "extension=txt" 

    pushd "c:\where\theFilesAre" && (
     for /f "tokens=1,2 delims=-" %%a in (' 
      dir /b /a-d /l "%prefix%-*-%suffix%.%extension%" 
     ') do ren "%prefix%-%%b-%suffix%.%extension%" "%%a%%b.%extension%" 
     popd 
    ) 

這將使用破折號作爲分隔符的文件名的元素分開,僅檢索前綴和有效數據,放棄其餘的。使用dir命令檢索文件列表,以小寫形式請求以適應前綴大小寫。

0

如果您瞭解正則表達式,那麼它很簡單,使用JREN.BAT - a hybrid JScript/batch utility that renames files via regular expression search and replace. JREN.BAT是純粹的腳本,可以從任何Windows XP機器上運行本機上運行。

正則表達式允許指定非常精確的重命名規則。

下一個襯裏查找:

  • 任何字符集合除了破折號(前綴)
  • 然後破折號
  • 那麼任何組數字
  • 然後破折號後跟任何除了短劃線之外的字符集(後綴)
  • 以.txt結尾(擴展名,不區分大小寫)

它保留了前綴和編號和擴展,使得整個事情小寫

jren "^([^-]+)-(\d+)-[^-]+(\.txt)$" "lc($1+$2+$3)" /i /j