请教批处理大虾,如何将一堆不同时期拍摄的照片按修改日期自动创建文件夹进行归档?

具体为:执行该批处理后,实现读取当前路径下所有文件(照片)的修改日期,根据日期创建一组文件夹(一个日期仅创建一个文件夹),之后将当前路径下所有文件按修改日期移动至对应的文... 具体为:执行该批处理后,实现读取当前路径下所有文件(照片)的修改日期,根据日期创建一组文件夹(一个日期仅创建一个文件夹),之后将当前路径下所有文件按修改日期移动至对应的文件夹下。 展开
 我来答
qop_dob
2022-06-25 · TA获得超过1.5万个赞
知道大有可为答主
回答量:1.3万
采纳率:79%
帮助的人:3930万
展开全部
不清楚你的实际文件/情况,仅以问题中的说明及猜测为据;以下代码复制粘贴到记事本,另存为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%"
rem 1为修改日期  2为拍摄日期
set "datetype=1"
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;
$datetype=$env:datetype;
$files=@(dir -literal $current|?{(@(".jpg",".jpeg") -contains $_.Extension) -and ($_ -is [System.IO.FileInfo])});
for($i=0;$i -lt $files.length;$i++){
    $t='';
    if($datetype -eq '1'){$t=$files[$i].LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss');}
    if($datetype -eq '2'){
        $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 ''){
        $newfolder=($t.trim().replace(':','-') -split '\s+')[0];
        if(-not (test-path -literal $newfolder)){[void][IO.Directory]::CreateDirectory($newfolder);}
        $files[$i].Name+$c+$newfolder;
    }
}
yyykkkyyyy
2016-06-04 · TA获得超过3136个赞
知道大有可为答主
回答量:2691
采纳率:40%
帮助的人:3268万
展开全部

不处理子文件夹吧?假定照片是jpg文件,可据实际情况修改第2行代码 (如有多种以空格分隔) 

@echo off&cd/d "%~dp0"
set x=*.jpg
for /f "tokens=1,3*" %%i in ('dir/a-d %x%^|findstr/b [12]')do (
   if not exist %%i\ md %%i
   move "%%k" %%i\
   echo %%k ===^> %%i)
pause
追问

附报错截图

追答

哦 原来你系统日期格式不是一般默认的-作分隔符而是/  它不能作文件夹名而出错

@echo off&cd/d "%~dp0" 
set x=*.jpg
for /f "tokens=1,3*" %%i in ('dir/a-d %x%^|findstr/b [12]')do ( 
  set "da=%%i"&set "fn=%%k"
  setlocal enabledelayedexpansion
  set "da=!da:/=-!"
  if not exist !da!\ md !da!
  move "!fn!" !da!\
  echo !fn! ===^> !da!
  endlocal)
pause
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式