【问题标题】:rename files in batch批量重命名文件
【发布时间】:2013-12-19 10:11:59
【问题描述】:

我有许多带有 unix 时间戳的文件正在移动到 Windows 文件服务器。

我们需要将这些文件批量重命名为可读的日期格式:YYYYMMDDHHMISS

我已经有了从 unix 时间戳到所需格式的转换功能。 我的问题是我必须找到一种方法来读取文件夹内容(xp_cmdshell)并将这些值传递给函数,然后用相应的格式重命名文件。 1.我知道如何获取可读格式 2. 可以读取文件夹内容 3. 这些 to 和 to rename to file 的组合是问题。

非常感谢任何帮助

【问题讨论】:

  • 您当前的代码是什么?你试过for 命令吗?
  • 文件名采用unix时间戳格式。菲文件的名称是 1081277409,我应该将文件重命名为 2004-04-0616:50:09.000。我有转换的解决方案。但是自动重命名是问题。我必须自动为 4000 个文件执行此操作。
  • 尝试一些代码并返回一个更具体的问题。提示,试试FOR %a in (*) DO @echo call renameTS %a

标签: file batch-file rename


【解决方案1】:

一旦您使用 xp_cmdshell 达到您的 3,您将拥有一个包含文件列表的单列表(我假设您已运行 dir 命令来获取文件名)。

为表声明一个游标,并为每条记录计算正确的名称并使用 xp_cmdshell 执行文件的重命名。

有关示例,请参见 here

无论如何,你可以做到,但 sql server 不是做大量文件重命名的地方(只是我的意见,任何其他答案都更适合这项任务)。

【讨论】:

    【解决方案2】:

    您不能按照评论中的建议在 Windows 文件名中包含 :。我建议像
    2004-04-06_16-50-09.000

    这样的格式

    我知道你说你有用于时间戳转换的代码,但我写了一个方便的JScript/batch hybrid utility called getTimestamp.bat,应该可以轻松完成这项工作。

    假设您的当前目录中有 getTimestamp.bat,或者更好的是,在您的路径中的某个位置,那么下面的批处理脚本应该可以解决问题:

    @echo off
    setlocal enableDelayedExpansion
    pushd "pathToYourFiles"
    for /f "delims=" %%F in (
      'dir /b /a-d *^|findstr "^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$"'
    ) do (
      call getTimestamp -d %%F000 -f {yyyy}-{mm}-{dd}_{hh}-{nn}-{ss}.{fff} -r name
      ren "%%F" "!name!"
    )
    popd
    

    如果您不喜欢新的名称格式,请阅读 getTimestamp.bat 中内置的文档:它有足够的选项,您应该能够得到您想要的。

    注意:

    仅当所有文件名都是从 2002 年开始时,上面的代码才有效。如果您的姓名早于 2002 年,那么我建议您改用 findstr "^[0-9]*$"

    【讨论】:

      猜你喜欢
      • 2017-04-20
      • 2012-09-02
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 2017-02-18
      • 2014-02-06
      • 2018-08-22
      相关资源
      最近更新 更多