cocos2dx lua 一键资源管理PowerShell脚本实现


特别说明 此管理脚本不包含图片资源加密,热更新资源文件列表是md5 和 文件路径构成的txt,如下

脚本文件是放在和res src 同级的文件夹里面

脚本内容如下

clear
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
$StartTime = Get-Date
$CurrentPath = (Get-Location).Path + "\d"
$CurrentPath
Write-Host "start please wait !"
### step 1 删除目标资源生成目录
if (Test-Path -Path ./d/src )
{
    Remove-Item -Path ./d/src -Recurse
}

### step2 加密lua文件并放到目标目录
cocos luacompile -s ..\src -d .\d\src  -e -k GD432LXCVLXXXXXX -b mahjongxxxxxxxxx --disable-compile
#3打印完成提示
Write-Host "compile and move src finish"

### step 3 移动资源文件
if (Test-Path -Path ./d/res )
{
    Remove-Item -Path ./d/res -Recurse
}
Copy-Item -Path ..\res -Destination .\d  -Recurse -Force
Write-Host "move res file finish"

### step 4 生成MD5文件
if (Test-Path -Path ./d/newUpdateResList1.txt )
{
    Remove-Item -Path ./d/newUpdateResList1.txt -Force
}
Get-ChildItem -Path ./d -Recurse | Get-FileHash -Algorithm MD5 | ForEach-Object{ $_.Hash + "    "+ (($_.Path -replace  ".*\\d\\","\") -replace "\\","/") >> ./d/newUpdateResList1.txt  }
Write-Host "make md5 finish"

#把utf-8-bom 格式的md5文件转换成 utf-8
$Path = (Get-Location).Path+"\d\newUpdateResList1.txt"
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)
$MyFile = Get-Content -Path .\d\newUpdateResList1.txt
[System.IO.File]::WriteAllLines($Path, $MyFile, $Utf8NoBomEncoding)

### step 5 导出差异文件
if ( Test-Path -Path .\newUpdateResList1.txt )
{
    $fileCounts = Get-Content -Path .\d\newUpdateResList1.txt 
    Write-Host ("new md5 file total line " + $fileCounts.Count)
    $NewHashFiles = @{}
    for( $idx = 0 ; $idx -lt $fileCounts.Count ; $idx++ )
    {
        $line = $fileCounts[$idx] -split "    "
        $NewHashFiles[$line[1]] = $line[0]
    }
    Write-Host ("after hash mapping total line " + $NewHashFiles.Count)

    $fileCounts = Get-Content -Path .\newUpdateResList1.txt 
    Write-Host ("old md5 file total line " + $fileCounts.Count)
    $OldHashFiles = @{}
    for( $idx = 0 ; $idx -lt $fileCounts.Count ; $idx++ )
    {
        $line = $fileCounts[$idx] -split "    "
        $OldHashFiles[$line[1]] = $line[0]
    }
    Write-Host ("after hash mapping total line " + $OldHashFiles.Count)

    $dirrentHash = @{}
    foreach($key in $NewHashFiles.Keys)
    {
        if ( $OldHashFiles.ContainsKey($key) )
        {
            if ( $OldHashFiles[$key] -ne $NewHashFiles[$key] )
            {
                $dirrentHash[$key] = $NewHashFiles[$key]
            }
        }
        else
        {
            $dirrentHash[$key] = $NewHashFiles[$key]
        }
    }

    if ( Test-Path -Path .\c )
    {
        Remove-Item -Path .\c -Recurse -Force
    }

    $noOutPut = New-Item -ItemType directory ./c -Force

    Write-Host ""
    $dirPath = (Get-Location).ToString() + "\d" -replace "\\","/"
    foreach($key in $dirrentHash.Keys)
    {
        $sourcePath = $dirPath+$key
        $targetPath = ".\c"+$key
        $sourcePath
        $pathParent = Split-Path $targetPath -Parent
        if( -not (Test-Path -Path $pathParent) )
        {
            $noOutPut = New-Item -ItemType directory $pathParent -Force
        }
        Copy-Item -Path $sourcePath -Destination $targetPath -Force
    }
    Write-Host ""

    Copy-Item -Path .\d\newUpdateResList1.txt -Destination .\c -Force
}

Write-Host ("total spend time "+ (((Get-Date) - $StartTime).TotalSeconds).ToString() +"s")

pause

其它格式的热更新资源列表文件 改改应该也可以用,PowerShell还没入门,写的不好的地方请见谅。