标题: [文件操作] 【已解决】求助批处理将时间戳转换为时间格式重命名文件 [打印本页]
作者: 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 等目标文件所在目录中运行...
- @set @x=1 /* &echo off
- for /f "delims=" %%F in ('dir /b/a-d *.jpg *.mp4') do (
- set "a=%%~nF" &setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('cscript /nologo /e:jscript "%~f0" "!a:~-13!" ') do ren "%%F" "%%a%%~xF"
- endlocal
- )
- pause&exit/b */
- v=WSH.arguments, t=new Date(Number(v(0)));
- Y=t.getFullYear(), M=t.getMonth()+1, D=t.getDate();
- h=t.getHours(), m=t.getMinutes(), s=t.getSeconds();
- ts=Y+(('0'+M).slice(-2))+(('0'+D).slice(-2))+'-'+(('0'+h).slice(-2))+(('0'+m).slice(-2))+(('0'+s).slice(-2));
- WSH.echo(ts), WSH.quit();
复制代码
作者: Five66 时间: 2024-7-25 18:46
啊 , 你这不是10位的吗
作者: newswan 时间: 2024-7-25 21:55
powershell- $folder = "D:\test"
- Get-ChildItem -LiteralPath $folder | ForEach-Object {
- if ( $_.Name -match "\d{10}" ) {
- $dt = (Get-Date -Date "1970-01-01").AddSeconds($matches[0]).ToString("yyyy-MMdd-HHmmss")
- $newName = $_.Name -replace "\d{10}", $dt
- Rename-Item -LiteralPath $_.FullName -NewName $newName
- }
- }
复制代码
作者: 77七 时间: 2024-7-25 23:01
根据楼主提供的链接,以下代码处理13位时间戳。- @echo off
- cd /d "%~dp0"
- set "str=powershell -c "Get-Date ([timezone]::CurrentTimeZone.ToLocalTime(([datetime]::new(1970,1,1,0,0,0)).AddMilliseconds"
- for /f "delims=" %%i in ('dir /b /a-d *.jpg *.mp4') do (
- set n=%%~ni
- setlocal enabledelayedexpansion
- for /f "tokens=1-6" %%a in ('%str%(!n:~-13!))) -UFormat '%%Y %%m %%d %%H %%M %%S'"') do (
- endlocal
- ren "%%i" "%%a%%b%%c-%%d%%e%%f%%~xi"
- )
- )
- 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
第一行指示文件夹- $folder = "D:\test"
- Get-ChildItem -LiteralPath $folder | ForEach-Object {
- if ( $_.Name -match "\d{10,13}" ) {
- $dt = (Get-Date -Date "1970-01-01").AddSeconds(($matches[0]).substring(0,10)).ToString("yyyy-MMdd-HHmmss")
- $newName = $dt + $_.Extension
- Rename-Item -LiteralPath $_.FullName -NewName $newName
- }
- }
复制代码
作者: aloha20200628 时间: 2024-7-26 13:02
本帖最后由 aloha20200628 于 2024-7-26 13:05 编辑
回复 9# meiszp
若批处改用powershell功能转换13位时间戳,可使2楼代码减点肥...
- @echo off &for /f "delims=" %%F in ('dir /b/a-d *.jpg *.mp4') do (
- set "a=%%~nF" &setlocal enabledelayedexpansion
- for /f "delims=" %%a in (
- '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"
- endlocal
- )
- 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 - @{}#? 2>nul&pause&powershell -c "type -literalpath '%~f0'|out-string|iex"&pause&exit/b
-
- gci -file |where {$_.name -match '\.(mp4|jpg|jpeg)$'} |foreach {
- if($_.basename-match '\d{13}'){
- $niuName=[DateTimeOffset]::FromUnixTimeMilliseconds([int64]$matches[0]).LocalDateTime.ToString('yyyyMMdd-HHmmss')
- rni -LiteralPath ($_.fullname) -NewName ($_.name -replace $matches[0],$niuName)
- }
- }
- 'done'
复制代码
作者: WHY 时间: 2024-7-27 08:43
- 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://www.bathome.net/) |
Powered by Discuz! 7.2 |