我在unix时间戳中有许多文件正在被移动到Windows文件服务器。
我们需要将这些文件批量重命名为可读的日期格式: YYYYMMDDHHMISS
我已经有了从unix时间戳到所需格式的转换函数。我的问题是,我必须找到一种方法来读取文件夹内容(xp_cmdshell),并将这些值传递给函数,然后用相应的格式重命名文件。1.我知道如何获得可读的格式2.我可以读取文件夹内容3.这些内容的组合和重命名为file是问题所在。
任何帮助都是非常感谢的
发布于 2013-12-03 20:50:46
您不能像您在评论中建议的那样,在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]*$"。
发布于 2013-12-03 22:52:15
一旦你使用了xp_cmdshell,你就会有一个包含文件列表的单列表格(我假设你已经运行了一个dir命令来获取文件的名称)。
为表声明一个游标,对于每个记录,计算正确的名称并使用xp_cmdshell执行文件的重命名。
有关示例,请参阅here。
不管怎么说,你可以这样做,但是sql server不是做大量文件重命名的地方(只是我的观点,任何其他答案对于这个任务来说都是更合适的)。
https://stackoverflow.com/questions/20349708
复制相似问题