关于批处理照片,想把文件夹中所有的照片按拍摄日期和时间批量重命名

例如比如文件夹中有一张照片拍摄日期是2014年2月2日18点20分,执行批处理文件后,会自动将此照片名称修改为" 2013-02-02 18点20分拍摄"
我这有个简单的,麻烦会的帮忙给修改下,谢谢
@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
set /a n=10000
for /r %%a in (*.jpg *.bmp *.jpeg) do (
set "date=%%~ta"
set "date=!date:~0,10!"
set "date=!date:-=!"
set /a n+=1
ren "%%~fa" "!date!拍摄!n:~-4!%%~xa"
)

第1个回答  2022-06-26

不清楚你的实际文件/情况,仅以问题中的说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起双击运行

<# :
cls&echo off&cd /d "%~dp0"&mode con lines=5000
rem 获取当前目录里多个jpg图片文件的拍摄日期来重命名
set #=Any question&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
set "current=%cd%"
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$b=[Convert]::FromBase64String("IC0tPiA=");
$c=[Text.Encoding]::Default.GetString($b);
Add-Type -AssemblyName 'System.drawing';
$current=$env:current;
$files=@(dir -literal $current|?{(@(".jpg",".jpeg") -contains $_.Extension) -and ($_ -is [System.IO.FileInfo])});
for($i=0;$i -lt $files.length;$i++){
    $t='';
    $img=[System.Drawing.Image]::FromFile($files[$i].FullName);
    foreach($it in $img.PropertyItems){
        if($it.Id -eq 0x9003){
            $t=[System.Text.Encoding]::ASCII.GetString($it.Value) -replace '\x00$','';
            break;
        }
    }
    $img.Dispose();
    if($t -ne ''){
        $dt=[System.DateTime]::ParseExact($t, 'yyyy:MM:dd HH:mm:ss', [System.Globalization.CultureInfo]::InvariantCulture);
        $newname=$dt.ToString('yyyy-MM-dd HH点mm分')+'拍摄'+$files[$i].Extension;
        $files[$i].Name+$c+$newname;
    }
}

第2个回答  推荐于2016-09-10
@echo off&setlocal enabledelayedexpansion
for /r %%a in (*.jpg *.bmp *.jpeg) do (
for /f  "tokens=1-6 delims=-/: " %%b in ("%%~ta") do (
ren "%%~fsa" "%%~b-%%~c-%%~d %%~e点%%~f分拍摄%%~xa" 
)
)

追问

执行了马上就消失了,提示:此时不应有" tokens=1-6 delims=/:"
还是我哪贴错了,能把做好的文件发上来吗? 或者发到我 企鹅 505080911 mail
谢谢,另外我是XP的系统,这个没关系吧

追答

经测试没有什么提示,执行后就完了,文件名都已经被修改了,XP系统,再重新复制粘贴一遍执行

本回答被提问者和网友采纳
相似回答