【问题标题】:Batch File to insert char in file name for multiple files in a folder批处理文件在文件夹中的多个文件的文件名中插入字符
【发布时间】:2013-04-27 06:39:12
【问题描述】:

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

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!"
)

上面的代码会把文件的静态部分改成我想要的,但是我不知道如何修改代码来弥补贷款号码的变化。

【问题讨论】:

    标签: windows batch-file rename


    【解决方案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"
    

    【讨论】:

    • 请注意,LOAN_ 后面的数字也可以为 0,因此查找过滤器可能会排除这些文件。
    • 但这是一个更理论上的选择,loan 永远不应该是0 :))
    • 不是贷款,是贷款后的数字_:)
    • 效果很好,谢谢。现在尝试剖析代码,看看我是否能完全理解它。
    【解决方案2】:
    for /f "tokens=*" %%f in ('dir /b /a-d %old%*.pdf^|find /i /v "%new%"') do (
    

    应该没看错 - 但我会在 MOVE 之前临时添加一个 ECHO  以检查它是否正常工作。

    有趣的是,您会在原件中使用*.jpg。我猜这不太可能奏效。

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

    【讨论】:

    • 我不是故意在代码中使用.jpg,应该是.pdf
    • 我冒昧地对您的帖子进行了一些修改。抱歉,如果我有什么问题,请随时回滚或根据需要更改我的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    相关资源
    最近更新 更多