批量重命名文件

时间:2013-12-03 11:19:37

标签: file batch-file rename

我在unix时间戳中有很多文件被移动到Windows文件服务器。

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

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

非常感谢任何帮助

2 个答案:

答案 0 :(得分:0)

您不能在评论中建议的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]*$"

答案 1 :(得分:0)

一旦你使用了xp_cmdshell,你就会得到一个包含文件列表的列表(我假设你已经运行了dir命令来获取文件的名称)。

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

有关示例,请参阅here

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