Untitled

 avatar
unknown
powershell
13 days ago
3.8 kB
12
Indexable
# This script renames Minecraft world folders to their in-game name (LevelName).
# It uses the NBTUtil.exe utility to read the level.dat file in each world.

# ==============================================================================
# SCRIPT CONFIGURATION
# ==============================================================================

# 1. SET THE PATH TO YOUR NBTUtil.exe
#    Make sure this path is correct. If the script is in the same folder as NBTUtil.exe,
#    you can leave this as '.\NBTUtil.exe'
$NBTUtilPath = "C:\NBTExplorer-2.8.0\NBTUtil.exe"

# 2. SET THE PATH TO THE MAIN FOLDER CONTAINING YOUR WORLD FOLDERS
#    Replace 'C:\minecraft\worlds' with the actual path to your worlds folder.
#    The script will loop through the subfolders inside this folder.
$MainWorldsPath = "C:\minecraft\worlds"

# ==============================================================================
# SCRIPT LOGIC (NO NEED TO EDIT BELOW THIS LINE)
# ==============================================================================

Write-Host "Starting world folder renaming process..." -ForegroundColor Cyan

# Check if NBTUtil.exe exists at the specified path
if (-not (Test-Path $NBTUtilPath)) {
    Write-Host "ERROR: NBTUtil.exe not found at '$NBTUtilPath'." -ForegroundColor Red
    Write-Host "Please check the path and try again." -ForegroundColor Yellow
    exit
}

# Use Get-ChildItem to get all subdirectories in the main worlds path
# The -Directory flag ensures we only get folders, not files
Get-ChildItem -Path $MainWorldsPath -Directory | ForEach-Object {
    $currentFolder = $_.FullName
    $levelDatPath = Join-Path -Path $currentFolder -ChildPath "level.dat"
    
    Write-Host ""
    Write-Host "Processing folder: $($_.Name)" -ForegroundColor Yellow
    
    # Check if the level.dat file exists in the current folder
    if (-not (Test-Path $levelDatPath)) {
        Write-Host "  - Skipping: 'level.dat' not found in this folder." -ForegroundColor Red
        return # Move to the next folder in the loop
    }
    
    # Use a try/catch block to handle potential errors from NBTUtil.exe
    try {
        # Execute the NBTUtil command and get the output.
        # The .Trim() at the end is crucial to remove leading/trailing spaces.
        $worldName = (&$NBTUtilPath --path="$levelDatPath" --printtree | Select-String "LevelName").Line.Split(':')[1].Trim()

        # Check if a world name was successfully extracted
        if ($worldName) {
            Write-Host "  - Found LevelName: '$worldName'" -ForegroundColor Green
            
            # Construct the new path for the folder
            $newFolderName = $worldName
            $newPath = Join-Path -Path $MainWorldsPath -ChildPath $newFolderName

            # Check if a folder with the new name already exists to prevent an error
            if (Test-Path $newPath) {
                Write-Host "  - Folder with name '$newFolderName' already exists. Skipping rename." -ForegroundColor Red
            } else {
                # Rename the folder using the new name
                Rename-Item -Path $currentFolder -NewName $newFolderName -Force -Confirm:$false
                Write-Host "  - Successfully renamed folder to: '$newFolderName'" -ForegroundColor Green
            }

        } else {
            Write-Host "  - Could not extract LevelName from 'level.dat'." -ForegroundColor Red
        }

    } catch {
        Write-Host "  - An error occurred while processing this folder. Skipping." -ForegroundColor Red
        Write-Host "  - Error details: $($_.Exception.Message)" -ForegroundColor Red
    }
}

Write-Host ""
Write-Host "Script finished." -ForegroundColor Cyan
Editor is loading...
Leave a Comment