找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 37019|回复: 16

[文件操作] 【已解决】求助批处理将时间戳转换为时间格式重命名文件

[复制链接]
发表于 2024-7-25 11:46:22 | 显示全部楼层 |阅读模式
本帖最后由 meiszp 于 2024-7-26 14:52 编辑

文件夹下有许多jpg,mp4,文件名为13位时间戳或前缀+13位时间戳,希望将13位时间戳转化为时间格式,重命名所有jpg,mp4。
例如:
文件名1721956888116.jpg,,时间戳1721878336转换为时间2024-07-26 09:21:28,重命名为202240726-092128.jpg   
文件名abc1721956922355.mp4,时间戳1721878383转换为时间2024-07-26 09:22:02,重命名为20240726-092202.mp4

可参考帖子
http://www.bathome.net/viewthread.php?tid=65212

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-7-25 15:07:54 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-7-26 11:20 编辑

回复 1# meiszp

以下代码存为 test.bat,置于 *.jpg/*.mp4 等目标文件所在目录中运行...

  1. @set @x=1 /* &echo off
  2. for /f "delims=" %%F in ('dir /b/a-d *.jpg *.mp4') do (
  3.         set "a=%%~nF" &setlocal enabledelayedexpansion
  4.         for /f "delims=" %%a in ('cscript /nologo /e:jscript "%~f0" "!a:~-13!" ') do ren "%%F" "%%a%%~xF"
  5.         endlocal
  6. )
  7. pause&exit/b */
  8. v=WSH.arguments, t=new Date(Number(v(0)));
  9. Y=t.getFullYear(), M=t.getMonth()+1, D=t.getDate();
  10. h=t.getHours(), m=t.getMinutes(), s=t.getSeconds();
  11. ts=Y+(('0'+M).slice(-2))+(('0'+D).slice(-2))+'-'+(('0'+h).slice(-2))+(('0'+m).slice(-2))+(('0'+s).slice(-2));
  12. WSH.echo(ts), WSH.quit();
复制代码
发表于 2024-7-25 18:46:35 | 显示全部楼层
啊 , 你这不是10位的吗
发表于 2024-7-25 21:55:56 | 显示全部楼层
powershell

  1. $folder = "D:\test"
  2. Get-ChildItem -LiteralPath $folder | ForEach-Object {
  3.         if ( $_.Name -match "\d{10}" ) {
  4.                 $dt = (Get-Date -Date "1970-01-01").AddSeconds($matches[0]).ToString("yyyy-MMdd-HHmmss")
  5.                 $newName = $_.Name -replace "\d{10}", $dt
  6.                 Rename-Item -LiteralPath $_.FullName -NewName $newName
  7.         }
  8. }
复制代码
发表于 2024-7-25 23:01:23 | 显示全部楼层
根据楼主提供的链接,以下代码处理13位时间戳。
  1. @echo off
  2. cd /d "%~dp0"
  3. set "str=powershell -c "Get-Date ([timezone]::CurrentTimeZone.ToLocalTime(([datetime]::new(1970,1,1,0,0,0)).AddMilliseconds"
  4. for /f "delims=" %%i in ('dir /b /a-d *.jpg *.mp4') do (
  5.         set n=%%~ni
  6.         setlocal enabledelayedexpansion
  7.         for /f "tokens=1-6" %%a in ('%str%(!n:~-13!))) -UFormat '%%Y %%m %%d %%H %%M %%S'"') do (
  8.                 endlocal
  9.                 ren "%%i" "%%a%%b%%c-%%d%%e%%f%%~xi"
  10.         )
  11. )
  12. pause
复制代码
 楼主| 发表于 2024-7-26 09:27:37 | 显示全部楼层
回复 3# Five66
已改13位
 楼主| 发表于 2024-7-26 09:35:07 | 显示全部楼层
回复 5# 77七
例子改成了13位,代码没有成功。
 楼主| 发表于 2024-7-26 09:36:29 | 显示全部楼层
回复 4# newswan
谢谢热心回复。例子时间戳改为了13位,10位和13位代码运行都不成功。
 楼主| 发表于 2024-7-26 09:38:22 | 显示全部楼层
回复 2# aloha20200628

谢谢回复,重命名成功,但代码转换的时间不对。
发表于 2024-7-26 11:23:02 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-7-26 11:35 编辑

回复 9# meiszp

2楼代码调整为针对 ‘13位时间戳’,已订正...
发表于 2024-7-26 12:47:25 | 显示全部楼层
回复 8# meiszp

前面的10位没问题,测试过
这个支持10位,13位
保存位 a.ps1
第一行指示文件夹
  1. $folder = "D:\test"
  2. Get-ChildItem -LiteralPath $folder | ForEach-Object {
  3.         if ( $_.Name -match "\d{10,13}" ) {
  4.                 $dt = (Get-Date -Date "1970-01-01").AddSeconds(($matches[0]).substring(0,10)).ToString("yyyy-MMdd-HHmmss")
  5.                 $newName = $dt + $_.Extension
  6.                 Rename-Item -LiteralPath $_.FullName -NewName $newName
  7.         }
  8. }
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2024-7-26 13:02:36 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-7-26 13:05 编辑

回复 9# meiszp

若批处改用powershell功能转换13位时间戳,可使2楼代码减点肥...

  1. @echo off &for /f "delims=" %%F in ('dir /b/a-d *.jpg *.mp4') do (
  2.         set "a=%%~nF" &setlocal enabledelayedexpansion
  3.         for /f "delims=" %%a in (
  4.                 'powershell "Get-Date ([timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddmilliSeconds('!a:~-13!'))) -uformat '%%Y%%m%%d-%%H%%M%%S' " ') do ren "%%F" "%%a%%~xF"
  5.         endlocal
  6. )
  7. pause&exit/b
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-7-26 14:51:34 | 显示全部楼层
回复 12# aloha20200628
谢谢,完美实现。
 楼主| 发表于 2024-7-26 14:52:07 | 显示全部楼层
回复 11# newswan
谢谢!
发表于 2024-7-26 15:35:51 | 显示全部楼层
回复 7# meiszp


   5楼代码,是测试过的。如果不成功,应该是代码被改动了,包括复制出错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 23:16 , Processed in 0.021933 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表