import os # Define the content template template = """ [{itemTitle}] itemTitle={itemTitle} itemAuthor= itemSize={itemSize} path=Hdd1:\\Content\\0000000000000000\\{second_subfolder}\\{third_subfolder}\\ {part_paths} dataurl="Link"{itemTitle_encoded}/{second_subfolder}/{third_subfolder}/{file_name} {dataurl_parts} """ def generate_dataurl_parts(base_path, itemTitle_encoded, second_subfolder, third_subfolder, next_subfolder): """ Generate dataurlpart2, dataurlpart3, etc. based on the files in the next subfolder. """ dataurl_parts = [] part_paths = [] base_url = "Link" # List all files in the next subfolder next_subfolder_path = os.path.join(base_path, next_subfolder) files = [f for f in os.listdir(next_subfolder_path) if os.path.isfile(os.path.join(next_subfolder_path, f))] # Add paths and dataurlparts for idx, file in enumerate(files, start=2): # Start indexing at 2 for dataurlpart2 file_name = file.replace('.data', '') part_paths.append(f"part{idx}path=Hdd1:\\Content\\0000000000000000\\{second_subfolder}\\{third_subfolder}\\{next_subfolder}\\") dataurl_parts.append(f"dataurlpart{idx}={base_url}{itemTitle_encoded}/{second_subfolder}/{third_subfolder}/{next_subfolder}/{file_name}") # Ensure dataurlpart2 is always included if not dataurl_parts: dataurl_parts.append("dataurlpart2=") # Default entry if no files are found return dataurl_parts, part_paths def format_item_size(item_size): """ Format the item size in MB or GB. """ item_size_mb = item_size / (1024 * 1024) # Convert bytes to MB if item_size_mb >= 1024: item_size_gb = item_size_mb / 1024 # Convert MB to GB if >= 1024 MB return f"{item_size_gb:.2f}GB" else: return f"{item_size_mb:.0f}MB" def create_ini_file(base_dir, output_file): ini_data = {} # Iterate over the first-level folders inside the base_dir for first_subfolder in os.listdir(base_dir): first_subfolder_path = os.path.join(base_dir, first_subfolder) if os.path.isdir(first_subfolder_path): # Iterate over the second-level folders for second_subfolder in os.listdir(first_subfolder_path): second_subfolder_path = os.path.join(first_subfolder_path, second_subfolder) if os.path.isdir(second_subfolder_path): # Iterate over the third-level folders for third_subfolder in os.listdir(second_subfolder_path): third_subfolder_path = os.path.join(second_subfolder_path, third_subfolder) if os.path.isdir(third_subfolder_path): next_subfolder = None # Check if there's a next-level folder for next_subfolder_candidate in os.listdir(third_subfolder_path): next_subfolder_path = os.path.join(third_subfolder_path, next_subfolder_candidate) if os.path.isdir(next_subfolder_path): next_subfolder = next_subfolder_candidate break item_size = 0 dataurl_parts, part_paths = generate_dataurl_parts(third_subfolder_path, first_subfolder.replace(' ', '%20'), second_subfolder.replace(' ', '%20'), third_subfolder.replace(' ', '%20'), next_subfolder) # Calculate total item size for root, _, files in os.walk(third_subfolder_path): for file in files: file_path = os.path.join(root, file) item_size += os.path.getsize(file_path) item_size_str = format_item_size(item_size) # Format itemTitle for URL encoding itemTitle_encoded = first_subfolder.replace(' ', '%20') # Find the first file to use its name in dataurl file_name = '' for file in os.listdir(third_subfolder_path): if file.endswith('.data'): file_name = file.replace('.data', '') break # Generate INI entry ini_entry = template.format( itemTitle=first_subfolder, # Keep itemTitle with spaces itemTitle_encoded=itemTitle_encoded, # Encoded itemTitle for URL second_subfolder=second_subfolder.replace(' ', '%20'), third_subfolder=third_subfolder.replace(' ', '%20'), next_subfolder=next_subfolder if next_subfolder else '', itemSize=item_size_str, # Use formatted size (MB/GB) file_name=file_name, # Add the file name without .data for URL dataurl_parts='\n'.join(dataurl_parts), # Add dataurlparts part_paths='\n'.join(part_paths) # Add part paths ) section_name = first_subfolder ini_data[section_name] = ini_entry # Write to the INI file with open(output_file, 'w', encoding='utf-8') as ini_file: for section_name, entry in ini_data.items(): ini_file.write(f"{entry}\n") print(f"Created {output_file}") # Run the function if __name__ == "__main__": base_directory = r"C:\Users\GOD_Games\" # Change this to the actual path output_file = os.path.join(base_directory, "all_configs.ini") create_ini_file(base_directory, output_file)