【问题标题】:Find and rename files with no extension?查找和重命名没有扩展名的文件?
【发布时间】:2010-11-04 18:06:39
【问题描述】:

所以,我有一堆没有扩展名的文件。我想编写一个 Windows 批处理脚本:

  1. 查找没有扩展名的文件(在指定文件夹中)
  2. 在文件名末尾添加 .bla

我是一个 Windows 批处理脚本菜鸟,我什至不知道从哪里开始。有什么建议吗?

【问题讨论】:

    标签: windows batch-file scripting rename


    【解决方案1】:

    对于 Windows 批处理文件,这将只重命名没有扩展名为 .bla 扩展名的文件:

    rename *. *.bla
    

    注意第一个参数是一个星号和一个点:*。

    第二个参数是:*.bla

    起始点 (*.) 组合表示在此上下文中没有扩展名的文件。

    之前:

    06/21/2009  11:57 PM                 6 test
    06/21/2009  11:57 PM                 7 test.exe
    06/21/2009  11:57 PM                 7 test2
    

    之后:

    06/21/2009  11:57 PM                 6 test.bla
    06/21/2009  11:57 PM                 7 test.exe
    06/21/2009  11:57 PM                 7 test2.bla
    

    附加说明:相反的命令行会将所有 .bla 文件重命名为无扩展名文件。

    编辑

    用于递归重命名跨子目录没有扩展名的文件(不支持路径中的空格):

    @echo off
    FOR /F %%i in ('dir /b/s/A-d') DO (
      if "%%~xi" == "" rename "%%~fi" "%%~ni.bla"
    )
    

    EDIT2:

    用于递归重命名跨子目录没有扩展名的文件(支持路径中的空格):

    @echo off
    for /f "tokens=* delims= " %%i in ('dir /b/s/A-d') DO (
      if "%%~xi" == "" rename "%%~fi" "%%~ni.bla"
    )
    

    【讨论】:

    • 我考虑过,但是名字的末尾连一个点都没有……这还能用吗?
    • 另外,我将如何包含子文件夹?
    • @Alan - 是的,它会起作用,我们在谈论多少个子文件夹?
    • 我测试过了,开始点代表没有扩展名的文件。
    • @JFV 只深一层,但有一堆。
    【解决方案2】:

    以下是递归重命名不带扩展名的文件的另一个可能命令(假设文件路径不包含空格):

    for /f %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla"
    

    批量版本(加倍%):

    @echo off
    for /f %%i in ('dir *. /b /s /a-d') do (
       rename "%%~fi" "%%~ni.bla"
    )
    


    如果文件或文件夹名称包含空格,请改用此命令:

    for /f "tokens=* delims= " %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla"
    

    批量版本:

    @echo off
    for /f "tokens=* delims= " %%i in ('dir *. /b /s /a-d') do (
       rename "%%~fi" "%%~ni.bla"
    )
    

    编辑:这里还有更短的单行,它支持路径中的空格:

    for /r %i in (*.) do ren "%~fi" "%~ni.bla"
    

    批量版本:

    @for /r %%i in (*.) do ren "%%~fi" "%%~ni.bla"
    

    【讨论】:

      【解决方案3】:

      要在子目录中执行此操作,请使用:

       for /f %a in ('dir /b /ad /s') do rename %a\*. *.bla
      

      如果你在批处理文件中使用这个,你需要加倍'%'

       for /f %%a in ('dir /b /ad /s') do rename %%a\*. *.bla
      

      编辑:

      如果你的目录名中有空格,你可以试试这个(批量版):

       for /f "tokens=* delims= " %%a in ('dir /b /ad /s') do rename "%%a\*." "*.bla"
      

      【讨论】:

      • 这里的小问题 - 不适用于带有空格的目录...否则看起来不错
      猜你喜欢
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      相关资源
      最近更新 更多