【问题标题】:Delete last 2 characters from file names in a folder using CMD使用 CMD 从文件夹中的文件名中删除最后 2 个字符
【发布时间】:2015-04-28 22:59:32
【问题描述】:

您好,我正在尝试替换每个文件名末尾的 _C。我用了 @echo 关闭 任. ?????????.*

这工作正常,但文件名宽度可能不同,所以我还能做些什么来仅选择最后 2 个字符并重命名它?

【问题讨论】:

    标签: file batch-file cmd filenames


    【解决方案1】:

    您可以使用环境变量的增强扩展,例如:

    %PATH:~0,-2%
    

    将提取除 PATH 变量的最后 2 个字符之外的所有字符。 更多详细信息,请查看 set 命令的帮助。

    您可以使用 FOR 命令将其应用于每个文件。不要忘记在循环中使用延迟扩展(使用感叹号而不是百分比)。

    FOR /F %I IN ('dir *.* /B') DO (
    set a=%~nI
    ren %I !a:~0,-2!%~xI
    )
    

    查看 FOR 命令的帮助以获取更多详细信息。

    更新:我修改了 FOR 循环并创建了可用的批处理代码(包括解释 cmets),它也适用于包含空格的长文件名。只需将其放入 .bat 文件中,然后在需要重命名文件的目录中运行此批处理。 注意:在批处理文件中使用时,百分比需要加倍。

    @echo off
    rem use extensions and delayed expansion
    setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
    FOR /F "tokens=*" %%I IN ('dir *.* /B') DO (
    rem Skip this batch
    if "%0" NEQ "%%I" (
    rem show renamed file
    echo %%I
    rem set A to filename without extension
    set A=%%~nI
    rem rename file to A minus last two characters with appended extension (which includes period)
    ren "%%I" "!A:~0,-2!%%~xI"
    ))
    

    【讨论】:

    • 我看不懂代码。请你解释一下。当我将它粘贴到 CMD 中时,我没有得到任何输出
    • @adr0327 第一个FOR循环只是一个例子,我没有直接在CMD中测试过。现在我创建了更有用的脚本,其中包括解释 cmets。
    猜你喜欢
    • 2014-01-23
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    相关资源
    最近更新 更多