Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用批处理替换前缀和后缀_Batch File_Cmd - Fatal编程技术网

Batch file 使用批处理替换前缀和后缀

Batch file 使用批处理替换前缀和后缀,batch-file,cmd,Batch File,Cmd,我有数百个文件名为 MUZ-123456-KH.txt 我想用替换前缀和后缀来替换这种类型的文件名 muz123456.txt 指: 前缀MUZ-替换为MUZ 后缀-KH替换为none 我有一个需要很多时间的工具。有人能帮我吗 这是一项日常工作,我很累您可以使用文件模式匹配(使用DIR命令)和文本替换(使用SET命令)的组合来完成这项工作 我添加了注释来解释每一步都在做什么 @ECHO OFF SETLOCAL EnableExtensions EnableDelayedExpansion R

我有数百个文件名为

MUZ-123456-KH.txt

我想用替换前缀和后缀来替换这种类型的文件名

muz123456.txt

指: 前缀MUZ-替换为MUZ

后缀-KH替换为none

我有一个需要很多时间的工具。有人能帮我吗


这是一项日常工作,我很累

您可以使用文件模式匹配(使用
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

假设文件遵循以下格式:

prefix dash datawithnodash dash suffix . txt
@echo关闭
setlocal enableextensions disabledelayedexpansion
设置“prefix=MUZ”
设置“后缀=KH”
设置“extension=txt”
按下“c:\where\theFilesAre”&&(
对于/f“令牌=1,2 delims=-”%%a in('
目录/b/a-d/l“%prefix%-*-%suffix%.%extension%”
“)是否执行“%prefix%-%%b-%suffix%.%extension%”%%a%%b.%extension%”
邻苯二胺
)

这将使用破折号作为分隔符来分隔文件名的元素,仅检索前缀和有效数据,而丢弃其余数据。使用
dir
命令检索文件列表,以小写形式请求它以适应前缀大小写。

如果您了解正则表达式,那么使用JREN.BAT非常简单,它是从XP开始在任何Windows机器上本机运行的纯脚本

正则表达式允许指定非常精确的重命名规则

下面的一行查找:

  • 除破折号(前缀)以外的任何字符集
  • 然后是冲刺
  • 然后是任意一组数字
  • 然后是破折号,后跟破折号(后缀)以外的任何字符集
  • 以.txt结尾(扩展名,不区分大小写)
它保留了前缀、数字和扩展名,使整个东西的大小写都更低

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

更清楚地了解你正在解决的问题。是否要重命名文件系统中的文件,或在包含名称列表的文本文件中更改其名称。你使用的是什么系统?是一个目录中的文件还是多个不同的目录中的文件。etc etcAll这些.txt文件只放在一个目录中(名称:Muzaffar)。我只想替换我在上面的querypossible duplicate中提到的文件名