【问题标题】:Batch renaming files on Windows Command Line在 Windows 命令行上批量重命名文件
【发布时间】:2019-01-25 15:44:16
【问题描述】:

我有几个由构建脚本生成的文件,如下所示:

sfml-audio-s-d.lib
sfml-graphics-s-d.lib
sfml-system-s-d.lib
...

我需要重命名它们以删除 -s-d 部分(在某些情况下可能只是 -s)。在 SO 周围搜索了一个小时后,我认为使用 rename 命令会很简单:

Ren ".\sfml-*-*.lib" "sfml-*.lib"

悬停它不会更改目录中的任何文件。

重命名这些文件的正确方法(最好是单行)是什么?

【问题讨论】:

    标签: batch-file command-line window rename command-prompt


    【解决方案1】:

    以下是您在使用命令时遇到的一些问题。首先,您似乎正在尝试仅使用 -s 重命名文件。问题是Ren "sfml-*-*.lib" "" 不能假定文件路径中的通配符。这意味着REN 不知道在"sfml-*.lib" 中为* 放置什么。

    要解决这个问题,您需要解决* 是什么。为此,可以使用FOR 语句。 FOR 语句首先需要的是文件名。使用命令For /f %%A In ('dir /b *.lib') Do (Echo %%A) 将列出所有文件名。现在的问题是我们只需要audio 中的sfml-audio-s.lib

    要使用FOR 语句仅抓取某些对象,您可以添加/f "tokens=2" %%A。这将告诉语句只抓取短语中的第二个单词。这种情况下的问题是,这仅在sfml-audio-s.libsfml audio s.lib 隔开时才有效。通过添加delims=-,该语句将忽略解析中的所有-。更多关于here的信息。

    来自 CMD: (一定要 CD 到目录位置)

    从 *.lib 文件名中删除“-s”

    For /f "tokens=2 delims=-" %A In ('dir /b *.lib') Do (Ren "sfml-*-*.lib" "sfml-%A.lib" 2>NUL)
    

    从 *.lib 文件名中删除“-s-d”

    For /f "tokens=2 delims=-" %A In ('dir /b *.lib') Do (Ren "sfml-*-*-*.lib" "sfml-%A.lib" 2>NUL)
    

    来自 BATCH: (将 CD C:\folder location 添加到脚本中)

    从 *.lib 文件名中删除“-s”

    For /f "tokens=2 delims=-" %%A In ('dir /b *.lib') Do (Ren "sfml-*-*.lib" "sfml-%%A.lib" 2>NUL)
    

    从 *.lib 文件名中删除“-s-d”

    For /f "tokens=2 delims=-" %%A In ('dir /b *.lib') Do (Ren "sfml-*-*-*.lib" "sfml-%%A.lib" 2>NUL)
    

    【讨论】:

      猜你喜欢
      • 2012-11-15
      • 2012-06-13
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 2013-12-19
      • 2020-11-22
      • 1970-01-01
      相关资源
      最近更新 更多