BAT 文件 - 替换文件名中的多个字符

BAT file - replace multiple characters in filename

找不到与其他人的问题不太相关的答案。

我想将一个 bat 文件放在一个目录中,运行 它可以实现以下目的:

  1. 将所有首字母“-”(连字符)替换为“-”(space-连字符-space)
  2. 将任何 3 个字符的月份名称 (Jan,Feb,...Dec) 替换为两位数的月份编号,前后跟一个连字符 ('Jan' = '-01-' , 'Mar' = '-03-')

所以如下:

32432492-2015Jan23-2015Feb23.pdf 
32432492-2015Feb24-2015Mar24.pdf 
32432492-2015Mar25-2015Apr29.pdf 

变为:

32432492 - 2015-01-23 - 2015-02-23.pdf 
32432492 - 2015-02-24 - 2015-03-24.pdf 
32432492 - 2015-03-25 - 2015-04-29.pdf 

我希望 "rename" 只 运行 一次(而不是一遍又一遍地重命名所有文件)。它应该对当前目录中的所有文件执行此操作(当然当前的 bat 文件除外)。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir\t w o"
FOR /f "delims=" %%a IN (
  'dir /b /a-d "%sourcedir%\*-*" '
 ) DO (
 SET "newname=%%a"
 FOR %%b IN ("Jan=-01-" "Feb=-02-" "Mar=-03-" ) DO SET "newname=!newname:%%~b!"
 FOR /f "tokens=1*delims=-" %%b IN ("!newname!") DO SET "newname=%%b - %%c"
 IF /i NOT "!newname!"=="%%a" ECHO(REN "%sourcedir%\%%a" "!newname!"
)

GOTO :EOF

您需要更改 sourcedir 的设置以适合您的情况。

我希望您能按照给定的形式完成 month/number 组。

所需的 REN 命令仅 ECHOed 用于测试目的。 确认命令正确后,将ECHO(REN更改为REN以实际重命名文件。


修订

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir\t w o"
FOR /f "delims=" %%a IN (
  'dir /b /a-d "%sourcedir%\*-*" '
 ) DO (
 SET "newname=%%a"
 FOR %%b IN ("Jan=/01/" "Feb=/02/" "Mar=/03/" ) DO SET "newname=!newname:%%~b!"
 FOR /f "tokens=1,2*delims=-" %%b IN ("!newname!") DO SET "newname=%%b - %%c - %%c"
 IF /i NOT "!newname!"=="%%a" ECHO REN "%sourcedir%\%%a" "!newname:/=-!"
)

GOTO :EOF

你说的 "Replace all initial '-' (hyphen) with ' - ' (space-hyphen-space)" 我认为是 "the initial hyphen in the name"。