批处理文件,用于在文件夹中为文件夹中的多个文件插入char

时间:2013-05-02 22:58:02

标签: windows batch-file rename

我有一系列名称如下的文件:

CHART_LOAN_6516_20130502.PDF

CHART_LOAN_2158_20130502.PDF

CHART_LOAN_78986_20130502.PDF

每个文件始终以CHART_LOAN_开头,但下一个数字不同,最后一个数字是创建日期。

我想在CHART_LOAN_number_之后为每个文件插入一个0_。如下所列:

CHART_LOAN_6516_0_20130502.PDF

CHART_LOAN_2158_0_20130502.PDF

CHART_LOAN_78986_0_20130502.PDF

通过我的研究,我发现插入了char,但是当名称随每个文件的变化时都没有。

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET old=CHART_LOAN_
SET new=CHART_LOAN_0_
for /f "tokens=*" %%f in ('dir /b *.jpg') do (
  SET newname=%%f
  SET newname=!newname:%old%=%new%!
  move "%%f" "!newname!"
)

上面的代码会将文件的静态部分更改为我想要的内容,但我不知道如何修改代码以补偿更改的贷款编号。

2 个答案:

答案 0 :(得分:1)

for /f "tokens=*" %%f in ('dir /b /a-d %old%*.pdf^|find /i /v "%new%"') do (

应该会看到你的权利 - 但我会在ECHO 之前临时添加MOVE,以检查它是否正常工作。

有趣的是,你在原版中使用了*.jpg。我猜不太可能有效。

重命名的文件将与模式..._0_...匹配,但原件不匹配 - 它们最接近的是CHART_LOAN_0.pdf。因此,您会发现匹配新掩码(/v)不区分大小写(/i)的所有文件名。 /a-d防止目标名称与old掩码匹配的远程可能性。管道前的插入符告诉CMD管道是for要执行的命令的一部分。

答案 1 :(得分:1)

试试这个:

@echo off &setlocal
for /f "tokens=1-3*delims=_" %%i in ('dir /b /a-d *.pdf ^| find /i /v "_0_"') do ren "%%i_%%j_%%k_%%l" "%%i_%%j_%%k_0_%%l"