我的硬盘出现了重大故障,我恢复了文件,但它们分散在 500 个目录中,顺序完全随机,没有日期
我需要将 10,000 张 jpg 文件从 500 个 DIR 移动到一个 DIR,以便我可以手动查看和排序每个文件。理想情况下,我需要忽略重复文件(但不要丢失它们,以防它们实际上是不同的文件)。
当我尝试通过桌面搜索执行此操作时,Windows 8 出现故障。
为此我应该使用什么 DOS 命令?
答案1
与我的其他答案类似,此 PowerShell 脚本将把所有文件收集到一个文件夹中,并按相同名称递增计数 (x)。
$BaseDir = 'Q:\Test\2016\'
$Dest = 'Q:\Test\jpg\'
$Ext = '.jpg'
$RegEx = "^(?<Name>.*?) \((?<Cnt>\d+)\)(?<Ext>$([regex]::escape($Ext)))$"
Set-Location $BaseDir
Get-ChildItem -Filter "*$Ext" -File -Recurse | ForEach-Object {
$NewName = "$Dest$($_.Name)"
while (Test-Path $NewName){
If ($NewName -match $RegEx){
$Cnt = [int]$matches.Cnt +1
$NewName = "$($matches.Name) ($Cnt)$Ext"
} Else {
$NewName = "$Dest$($_.BaseName) (1)$Ext"
}
}
$_|Move-Item -Destination $NewName
}
答案2
我会安装 Everything Search -https://www.voidtools.com/. 这应该可以让你开始行动了。
答案3
我不知道您的 jpg 文件名是什么样的,但查看文件中是否有任何标签以便用日期、位置等重命名它们可能是一个更好的选择。
对于复制/移动到单个平面文件夹,此批处理可能会对您有所帮助。
编辑 varsBaseDir
和Dest
以适合您的环境。
使用 fc.exe 检查文件是否是真正的重复项,在这种情况下不会移动它们。
如果不同,则会在括号中(1)
附加一个类似于资源管理器的数字。
要使此操作对不同的扩展执行,可以相应地调整 var Ext
。
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set "BaseDir=Q:\Test\2016\"
Set "Dest=Q:\Test\jpg\"
Set "Ext=.jpg"
Pushd "%BaseDir%"
For /f "delims=" %%A in ('Dir /B /S /A-D *%Ext% 2>Nul'
) Do If Not Exist "%Dest%%%~nxA" (
Move "%%~fA" "%Dest%" >Nul
) Else (
Set Cnt=1
Call :MoveInc "%%A" "%Dest%%%~nxA"
)
PopD
Goto :EOF
:MoveInc
:: Check if file is a duplicate
Fc.exe /B %1 %2 >Nul 2>&1 && (Echo %1 is a duplicate of %2 &Goto :Eof)
:: Check if name already has (x) appended
Set BaseName=%~n1
Echo %BaseName%|Findstr "([0-9][0-9]*)$" 1>NUL 2>&1 || Goto :Next
:: Get already present number, since " (1)" is at least 4 chars
Set Last=-4
:Again
Echo:!BaseName:~%Last%!|Find " (">NUL||(Set /A Last-=1&Goto :Again)
Set "BaseName=!BaseName:~0,%Last%!"
Set /A Cnt=!BaseName:~%Last%! +1
:Next
Set "NewName=%Dest%%BaseName% (%Cnt%)%~x1"
If Exist "%NewName%" (Set /A Cnt+=1 & Goto :Next)
Move %1 "%NewName%" >Nul
Goto :Eof