2014-12-27 95 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