【问题标题】:Filenames renaming using .bat?使用 .bat 重命名文件名?
【发布时间】:2012-06-20 01:27:34
【问题描述】:

嘿嘿。 我需要你们帮助使用 .bat 文件重命名文件。 我有多个文件需要在指定字符号后裁剪。 例如,我想在它们的第五个字符之后裁剪文件的名称,这样

filename.exe > filen.exe
anothername.exe > anoth.exe
absolutelydifferentname.exe > absol.exe

而且,如果可能的话,我想知道如何做相反的事情。我的意思是,将某些字符保留在末尾,从文件名的开头裁剪。

谢谢。

【问题讨论】:

  • 如果你有filename.exe 和filename2.exe 会发生什么?你不能有两个filen.exe..
  • stackoverflow.com/questions/636381/… 可能有用,因为您需要查找子字符串。不过,Blorgbeard 的评论是您需要考虑如何处理的事情。

标签: batch-file cmd filenames


【解决方案1】:

如果这是一次性的,或者其他一些手动场景,请查看 CKRename

【讨论】:

    【解决方案2】:

    如果您想在批处理文件中执行此操作,则应使用以下方法:

    @echo off
    
    setlocal ENABLEDELAYEDEXPANSION
    
    for %%i in (<Directory name here>\*) do (
      set filename=%%~ni
      ren "%%~i" "!filename:~0,5!%%~xi"
    )
    
    endlocal
    

    如果您希望更改用于构建最终文件名的字符数,请更改 ren "%%~i" "!filename:~0,<strong>5</strong>!%%~xi" 中的“5”。

    要获取最后 5 个字符,请尝试:ren "%%~i" "!filename:~<strong>-5</strong>!%%~xi"

    对于所有除了前5个字符:ren "%%~i" "!filename:~<strong>5</strong>!%%~xi"

    【讨论】:

    • 非常感谢@Iridium。以这种方式编辑setlocal EnableDelayedExpansion for %%i in (*.exe) do ( set filename=%%~ni ren "%%~i" "!filename:~0,5!%%~xi" ) 它似乎做得很好。我也想知道你是否知道让它从头而不是尾修剪字符的方法?
    • 我已经编辑了我的答案以包含您的建议(知道一定有办法,但没有检查 setlocal)。我还添加了获取最后 X 个字符的方式
    • 是的,就是这样。谢谢朋友,你是最棒的!
    • 不过,您不需要最终的endlocal;它在批次结束时暗示。
    • 只要没有文件名包含! 字符,此解决方案就可以正常工作。我发布了一个modified version,消除了这个限制。
    【解决方案3】:

    如果任何文件名包含 ! 字符,Iridium solution 将失败,因为如果值包含 ! 并启用延迟扩展,%%i 的扩展将失败。这很容易通过在循环中打开和关闭延迟扩展来解决。

    通常不需要在顶部显式禁用延迟扩展。但是有可能在批处理文件的开头已经启用了延迟扩展,所以为了安全起见,我将其包括在内。

    @echo off
    setlocal disableDelayedExpansion
    for %%F in ("<Directory name here>\*") do (
      set "full=%%F"
      set "name=%%~nF"
      set "ext=%%~xF"
      setlocal enableDelayedExpansion
      ren "!full!" "!name:~0,5!!ext!"
      endlocal
    )
    

    【讨论】:

    • +1,如果你使用扩展的SET 语法,它对不可见的空格也是安全的:-)
    猜你喜欢
    • 2014-06-07
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多