把文件批量导入同名文件夹

把文件批量导入同名文件夹,第1张

今天遇到了一个小问题:有一堆积累了一段时间的照片,都是JPG格式的,文件名也已经按这样的格式「XXXXXXXX_YYYYY.jpg」完成命名了,现在需要按下划线 前面的文字为文件夹名称,把下划线 前面的内容相同的照片批量保存到同一个文件夹里面去。

虽然用鼠标点选,然后复制、粘贴也不是太~(长音)麻烦,但是照片实在有点多,从密密麻麻、长长短短的文件名里,一个一个看清楚什么是名字,然后再找到要放入的文件夹, *** 作时间久了还是有点伤眼睛的。

比如像下面这张图的时候,

于是想到用shell script文件来做批量处理。经过小小的调试,顺利完工。感到小确幸之余,就想着干脆分享上来。一则作为笔记留底,以后再遇到这样的情况就直接拿来用,也懒得再想了;二则希望能为有相同需要的同学提供一点儿微小的帮助吧。

好的,闲话少叙,言归正传。下面就奉上shell script的具体内容吧!

为了避免在通过脚本文件执行「移动」文件命令时发生异常而导致源文件消失(连回收站里也没有)的情况,建议使用「复制」文件到同名文件夹的脚本文件来处理,等正确完成复制 *** 作之后,再手动统一删除不需要了的源文件。

以下是用类似的文件名来做演示的截图示意,文件名没有实际意义,仅供示意。

完成!

砚湖@飘香生活馆

二〇一八年十二月十九日

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

cls&echo off&cd /d "%~dp0"&mode con lines=5000

rem 根据文件夹名称开头相同的字符内容,将名称长度较长的文件夹对应放入名称长度较短的文件夹里

set #=Any questions&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)

$current=$env:current

$dic1=New-Object 'System.Collections.Generic.Dictionary[string, string]'

$dic2=New-Object 'System.Collections.Generic.Dictionary[string, object]'

$folders=@(dir -literal $current|?{$_ -is [System.IO.DirectoryInfo]}|sort {$_.Name.length})

for($i=0$i -lt $folders.length$i++){

    $base1=$folders[$i].Name

    if(-not $dic1.ContainsKey($base1)){

        for($j=0$j -lt $folders.length$j++){

            $base2=$folders[$j].Name

            if(-not $dic1.ContainsKey($base2)){

                if(($base2.length -gt $base1.length) -and ($base2.toLower().Contains($base1.toLower()))){

                    if(-not $dic2.ContainsKey($base1)){

                        $arr=New-Object -TypeName System.Collections.ArrayList

                        $dic1.add($base1, '')

                        $dic2.add($base1, $arr)

                    }

                    if(-not $dic1.ContainsKey($base2)){$dic1.add($base2, '')}

                    [void]$dic2[$base1].add($base2)

                }

            }

        }

    }

}

foreach($key in $dic2.Keys){

    for($i=0$i -lt $dic2[$key].Count$i++){

        $dic2[$key][$i]+$c+$key

    }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11952434.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存