Board logo

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

作者: meiszp    时间: 2024-7-25 11:46     标题: 【已解决】求助批处理将时间戳转换为时间格式重命名文件

本帖最后由 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
作者: aloha20200628    时间: 2024-7-25 15:07

本帖最后由 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();
复制代码

作者: Five66    时间: 2024-7-25 18:46

啊 , 你这不是10位的吗
作者: newswan    时间: 2024-7-25 21:55

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. }
复制代码

作者: 77七    时间: 2024-7-25 23:01

根据楼主提供的链接,以下代码处理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
复制代码

作者: meiszp    时间: 2024-7-26 09:27

回复 3# Five66
已改13位
作者: meiszp    时间: 2024-7-26 09:35

回复 5# 77七
例子改成了13位,代码没有成功。
作者: meiszp    时间: 2024-7-26 09:36

回复 4# newswan
谢谢热心回复。例子时间戳改为了13位,10位和13位代码运行都不成功。
作者: meiszp    时间: 2024-7-26 09:38

回复 2# aloha20200628

谢谢回复,重命名成功,但代码转换的时间不对。
作者: aloha20200628    时间: 2024-7-26 11:23

本帖最后由 aloha20200628 于 2024-7-26 11:35 编辑

回复 9# meiszp

2楼代码调整为针对 ‘13位时间戳’,已订正...

作者: newswan    时间: 2024-7-26 12:47

回复 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. }
复制代码

作者: aloha20200628    时间: 2024-7-26 13:02

本帖最后由 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
复制代码

作者: meiszp    时间: 2024-7-26 14:51

回复 12# aloha20200628
谢谢,完美实现。
作者: meiszp    时间: 2024-7-26 14:52

回复 11# newswan
谢谢!
作者: 77七    时间: 2024-7-26 15:35

回复 7# meiszp


   5楼代码,是测试过的。如果不成功,应该是代码被改动了,包括复制出错。
作者: Five66    时间: 2024-7-26 16:04

回复 6# meiszp
  1. @{}#? 2>nul&pause&powershell -c "type -literalpath '%~f0'|out-string|iex"&pause&exit/b
  2. gci -file |where {$_.name -match '\.(mp4|jpg|jpeg)$'} |foreach {
  3. if($_.basename-match '\d{13}'){
  4. $niuName=[DateTimeOffset]::FromUnixTimeMilliseconds([int64]$matches[0]).LocalDateTime.ToString('yyyyMMdd-HHmmss')
  5. rni -LiteralPath ($_.fullname) -NewName ($_.name -replace $matches[0],$niuName)
  6. }
  7. }
  8. 'done'
复制代码

作者: WHY    时间: 2024-7-27 08:43

  1. PowerShell "dir *.jpg, *.mp4 -File | ?{$_.BaseName -match '[0-9]{13}'} | ren -NewName {$dt = ([DateTime]'1970-01-01').AddMilliSeconds(8*3600*1000+$matches[0]).ToString('yyyyMMdd-HHmmss'); $dt + $_.Extension}"
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2