diff --git a/py/zconfig/Regional bat/Korean Readme.txt b/py/Regional/KR/Korean Readme.txt similarity index 100% rename from py/zconfig/Regional bat/Korean Readme.txt rename to py/Regional/KR/Korean Readme.txt diff --git a/py/zconfig/Regional bat/NSCB_KR.bat b/py/Regional/KR/NSCB_KR.bat similarity index 100% rename from py/zconfig/Regional bat/NSCB_KR.bat rename to py/Regional/KR/NSCB_KR.bat diff --git a/py/zconfig/Regional bat/NSCB_KR_options.cmd b/py/Regional/KR/NSCB_KR_options.cmd similarity index 100% rename from py/zconfig/Regional bat/NSCB_KR_options.cmd rename to py/Regional/KR/NSCB_KR_options.cmd diff --git a/README_KR.md b/py/Regional/KR/README_KR.md similarity index 100% rename from README_KR.md rename to py/Regional/KR/README_KR.md diff --git a/py/zconfig/Regional bat/install_dependencies_KR.bat b/py/Regional/KR/install_dependencies_KR.bat similarity index 100% rename from py/zconfig/Regional bat/install_dependencies_KR.bat rename to py/Regional/KR/install_dependencies_KR.bat diff --git a/py/zconfig/Regional bat/zconfig/NSCB_KR_options.cmd b/py/Regional/KR/zconfig/NSCB_KR_options.cmd similarity index 100% rename from py/zconfig/Regional bat/zconfig/NSCB_KR_options.cmd rename to py/Regional/KR/zconfig/NSCB_KR_options.cmd diff --git a/py/zconfig/Regional bat/zconfig/NSCB_options.cmd b/py/Regional/KR/zconfig/NSCB_options.cmd similarity index 100% rename from py/zconfig/Regional bat/zconfig/NSCB_options.cmd rename to py/Regional/KR/zconfig/NSCB_options.cmd diff --git a/py/zconfig/Regional bat/zconfig/NUT_DB_REGIONS_URL.txt b/py/Regional/KR/zconfig/NUT_DB_REGIONS_URL.txt similarity index 100% rename from py/zconfig/Regional bat/zconfig/NUT_DB_REGIONS_URL.txt rename to py/Regional/KR/zconfig/NUT_DB_REGIONS_URL.txt diff --git a/py/zconfig/Regional bat/zconfig/NUT_DB_TITLES_URL.txt b/py/Regional/KR/zconfig/NUT_DB_TITLES_URL.txt similarity index 100% rename from py/zconfig/Regional bat/zconfig/NUT_DB_TITLES_URL.txt rename to py/Regional/KR/zconfig/NUT_DB_TITLES_URL.txt diff --git a/py/Regional/ZH/Interface.bat b/py/Regional/ZH/Interface.bat new file mode 100644 index 00000000..4684bbca --- /dev/null +++ b/py/Regional/ZH/Interface.bat @@ -0,0 +1,77 @@ +@ECHO OFF +:TOP_INIT +set "prog_dir=%~dp0" +set "bat_name=%~n0" +set "ofile_name=%bat_name%_options.cmd" +Title NSC_Builder v1.00c -- Profile: %ofile_name% -- by JulesOnTheRoad +set "list_folder=%prog_dir%lists" +::----------------------------------------------------- +::编辑此变量以链接其他选项文件 +::----------------------------------------------------- +set "op_file=%~dp0zconfig\%ofile_name%" + +::----------------------------------------------------- +::从选项文件复制选项 +::----------------------------------------------------- +setlocal +if exist "%op_file%" call "%op_file%" +endlocal & ( +REM environment +set "pycommand=%pycommand%" +set "start_minimized=%start_minimized%" +set "browserpath=%browserpath%" +set "videoplayback=%videoplayback%" +set "height=%height%" +set "width=%width%" +set "port=%port%" +set "host=%host%" +set "noconsole=%noconsole%" +set "pycommandw=%pycommandw%" +REM 程序 +set "squirrel=%nut%" +REM 文件 +set "dec_keys=%dec_keys%" +) +::----------------------------------------------------- +::设置绝对路径 +::----------------------------------------------------- +::程序完整路径 +if exist "%~dp0%squirrel%" set "squirrel=%~dp0%squirrel%" + +::重要文件完整路径 +if exist "%~dp0%dec_keys%" set "dec_keys=%~dp0%dec_keys%" +::输出文件夹 +CD /d "%~dp0" +if not exist "%dec_keys%" ( goto missing_things ) + +if "%start_minimized%" EQU "yes" ( goto minimize ) +goto start +:minimize +if not "%1" == "min" start /MIN cmd /c %0 min & exit/b >nul 2>&1 +:start +if "%noconsole%" == "false" (%pycommand% "%squirrel%" -lib_call nutdb check_files ) +if "%noconsole%" == "false" goto n1 +start %pycommandw% "%squirrel%" -lib_call workers back_check_files +start %pycommandw% "%squirrel%" -lib_call workers scrape_local_libs +start %pycommandw% "%squirrel%" -lib_call workers scrape_remote_libs +:n1 +if "%noconsole%" == "false" (%pycommand% "%squirrel%" -lib_call Interface start -xarg "%browserpath%" "%videoplayback%" "%height%" "%width%" "%port%" "%host%" ) +if "%noconsole%" == "false" goto salida +start %pycommandw% "%squirrel%" -lib_call Interface start -xarg "%browserpath%" "%videoplayback%" "%height%" "%width%" "%port%" "%host%" "%noconsole%" +goto salida + +:missing_things +echo .................................... +echo 您缺少以下内容: +echo .................................... +echo. +::文件完整路径 +if not exist "%dec_keys%" echo - "keys.txt"文件指向不正确或者丢失。 +echo. +pause +echo 程序即将退出 +PING -n 2 127.0.0.1 >NUL 2>&1 +goto salida +:salida +::暂停 +exit diff --git a/py/Regional/ZH/NSCB.bat b/py/Regional/ZH/NSCB.bat new file mode 100644 index 00000000..abf5c181 --- /dev/null +++ b/py/Regional/ZH/NSCB.bat @@ -0,0 +1,3158 @@ +@ECHO OFF +:TOP_INIT +set "prog_dir=%~dp0" +set "bat_name=%~n0" +set "ofile_name=%bat_name%_options.cmd" +set "opt_interface=Interface_options.cmd" +set "opt_server=Server_options.cmd" +Title NSC_Builder v1.00c -- Profile: %ofile_name% -- by JulesOnTheRoad +set "list_folder=%prog_dir%lists" +::----------------------------------------------------- +::编辑此变量以链接其他选项文件 +::----------------------------------------------------- +set "op_file=%~dp0zconfig\%ofile_name%" +set "opt_interface=%~dp0zconfig\%opt_interface%" +set "opt_server=%~dp0zconfig\%opt_server%" +::----------------------------------------------------- +::从选项文件复制选项 +::----------------------------------------------------- +setlocal +if exist "%op_file%" call "%op_file%" +endlocal & ( +REM 变量 +set "safe_var=%safe_var%" +set "vrepack=%vrepack%" +set "vrename=%vrename%" +set "fi_rep=%fi_rep%" +set "zip_restore=%zip_restore%" +set "manual_intro=%manual_intro%" +set "va_exit=%va_exit%" +set "skipRSVprompt=%skipRSVprompt%" +set "oforg=%oforg%" +set "NSBMODE=%NSBMODE%" +set "romaji=%romaji%" +set "transnutdb=%transnutdb%" +set "workers=%workers%" +set "compression_lv=%compression_lv%" +set "compression_threads=%compression_threads%" +set "xci_export=%xci_export%" +set "MTP_verification=%MTP_verification%" +set "MTP_prioritize_NSZ=%MTP_prioritize_NSZ%" +set "MTP_exclude_xci_autinst=%MTP_exclude_xci_autinst%" +set "MTP_aut_ch_medium=%MTP_aut_ch_medium%" +set "MTP_chk_fw=%MTP_chk_fw%" +set "MTP_prepatch_kg=%MTP_prepatch_kg%" +set "MTP_prechk_Base=%MTP_prechk_Base%" +set "MTP_prechk_Upd=%MTP_prechk_Upd%" +set "MTP_saves_Inline=%MTP_saves_Inline%" +set "MTP_saves_AddTIDandVer=%MTP_saves_AddTIDandVer%" +set "MTP_pdrive_truecopy=%MTP_pdrive_truecopy%" +set "MTP_stc_installs=%MTP_stc_installs%" +set "MTP_ptch_inst_spec=%MTP_ptch_inst_spec%" + +REM 拷贝功能 +set "pycommand=%pycommand%" +set "buffer=%buffer%" +set "nf_cleaner=%nf_cleaner%" +set "patchRSV=%patchRSV%" +set "vkey=%vkey%" +set "capRSV=%capRSV%" +set "fatype=%fatype%" +set "fexport=%fexport%" +set "skdelta=%skdelta%" +REM 程序 +set "squirrel=%nut%" +set "MTP=%MTP%" +set "xci_lib=%xci_lib%" +set "nsp_lib=%nsp_lib%" +set "zip=%zip%" +set "hacbuild=%hacbuild%" +set "listmanager=%listmanager%" +set "batconfig=%batconfig%" +set "batdepend=%batdepend%" +set "infobat=%infobat%" +REM 文件 +set "uinput=%uinput%" +set "dec_keys=%dec_keys%" +REM 文件夹 +set "w_folder=%~dp0%w_folder%" +set "fold_output=%fold_output%" +set "zip_fold=%~dp0%zip_fold%" +) +::----------------------------------------------------- +::设置绝对路径 +::----------------------------------------------------- +::程序完整路径 +if exist "%~dp0%squirrel%" set "squirrel=%~dp0%squirrel%" +if exist "%~dp0%xci_lib%" set "xci_lib=%~dp0%xci_lib%" +if exist "%~dp0%nsp_lib%" set "nsp_lib=%~dp0%nsp_lib%" +if exist "%~dp0%zip%" set "zip=%~dp0%zip%" + +if exist "%~dp0%hacbuild%" set "hacbuild=%~dp0%hacbuild%" +if exist "%~dp0%listmanager%" set "listmanager=%~dp0%listmanager%" +if exist "%~dp0%batconfig%" set "batconfig=%~dp0%batconfig%" +if exist "%~dp0%batdepend%" set "batdepend=%~dp0%batdepend%" +if exist "%~dp0%infobat%" set "infobat=%~dp0%infobat%" +::重要文件完整路径 +if exist "%~dp0%uinput%" set "uinput=%~dp0%uinput%" +if exist "%~dp0%dec_keys%" set "dec_keys=%~dp0%dec_keys%" +::输出文件夹 +CD /d "%~dp0" +if not exist "%fold_output%" MD "%fold_output%" +if not exist "%fold_output%" MD "%~dp0%fold_output%" +if exist "%~dp0%fold_output%" set "fold_output=%~dp0%fold_output%" +::----------------------------------------------------- +::多项检查 +::----------------------------------------------------- +::选项文件检查 +if not exist "%op_file%" ( goto missing_things ) +::程序检查 +if not exist "%squirrel%" ( goto missing_things ) +if not exist "%xci_lib%" ( goto missing_things ) +if not exist "%nsp_lib%" ( goto missing_things ) +if not exist "%zip%" ( goto missing_things ) + +if not exist "%hacbuild%" ( goto missing_things ) +if not exist "%listmanager%" ( goto missing_things ) +if not exist "%batconfig%" ( goto missing_things ) +if not exist "%infobat%" ( goto missing_things ) +::重要文件检查 +if not exist "%dec_keys%" ( goto missing_things ) +::----------------------------------------------------- +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 + +::检查用户是否拖动文件夹或文件 +if "%~1"=="" goto manual +if "%vrepack%" EQU "nodelta" goto aut_rebuild_nodeltas +if "%vrepack%" EQU "rebuild" goto aut_rebuild_nsp +dir "%~1\" >nul 2>nul +if not errorlevel 1 goto folder +if exist "%~1\" goto folder +goto file + +:folder +if "%fi_rep%" EQU "multi" goto folder_mult_mode +if "%fi_rep%" EQU "baseid" goto folder_packbyid +goto folder_ind_mode + +::自动模式。 单文件重打包处理选项 +:folder_ind_mode +rem if "%fatype%" EQU "-fat fat32" goto folder_ind_mode_fat32 +call :program_logo +echo -------------------------------------- +echo 自动模式。单文件打包已设置 +echo -------------------------------------- +echo. +::************* +::NSP文件 +::************* +for /r "%~1" %%f in (*.nsp) do ( +set "target=%%f" +if exist "%w_folder%" RD /s /q "%w_folder%" >NUL 2>&1 + +set "filename=%%~nf" +set "orinput=%%f" +set "showname=%orinput%" + +MD "%w_folder%" +REM echo %safe_var%>safe.txt +call :squirrell + +if "%zip_restore%" EQU "true" ( set "ziptarget=%%f" ) +if "%zip_restore%" EQU "true" ( call :makezip ) +call :getname +REM setlocal enabledelayedexpansion +REM set vpack=!vrepack! +REM endlocal & ( set "vpack=!vrepack!" ) + +REM if "%trn_skip%" EQU "true" ( call :check_titlerights ) +if "%vrename%" EQU "true" ( call :addtags_from_nsp ) + +if "%vrepack%" EQU "nsp" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "nsp" -dc "%%f" ) +if "%vrepack%" EQU "xci" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "xci" -dc "%%f" ) +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "both" -dc "%%f" ) + +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 + +move "%w_folder%\*.xci" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\%filename%.nsp" ) + +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +) + +::************* +::NSZ文件 +::************* +for /r "%~1" %%f in (*.nsz) do ( +set "target=%%f" +if exist "%w_folder%" RD /s /q "%w_folder%" >NUL 2>&1 + +set "filename=%%~nf" +set "orinput=%%f" +set "showname=%orinput%" + +MD "%w_folder%" +REM echo %safe_var%>safe.txt +call :squirrell + +if "%zip_restore%" EQU "true" ( set "ziptarget=%%f" ) +if "%zip_restore%" EQU "true" ( call :makezip ) +call :getname +REM setlocal enabledelayedexpansion +REM set vpack=!vrepack! +REM endlocal & ( set "vpack=!vrepack!" ) + +REM if "%trn_skip%" EQU "true" ( call :check_titlerights ) +if "%vrename%" EQU "true" ( call :addtags_from_nsp ) + +if "%vrepack%" EQU "nsp" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "nsp" -dc "%%f" ) +if "%vrepack%" EQU "xci" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "xci" -dc "%%f" ) +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "both" -dc "%%f" ) + +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 + +move "%w_folder%\*.xci" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\%filename%.nsp" ) + +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +) + +::XCI文件 +for /r "%~1" %%f in (*.xci) do ( +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +set "filename=%%~nf" +set "orinput=%%f" +set "showname=%orinput%" + +MD "%w_folder%" +call :getname +if "%vrename%" EQU "true" ( call :addtags_from_xci ) + +if "%vrepack%" EQU "nsp" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "nsp" -dc "%%f" ) +if "%vrepack%" EQU "xci" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "xci" -dc "%%f" ) +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "both" -dc "%%f" ) + +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 + +move "%w_folder%\*.xci" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\%filename%.nsp" ) + +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto aut_exit_choice + +::XCZ文件 +for /r "%~1" %%f in (*.xcz) do ( +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +set "filename=%%~nf" +set "orinput=%%f" +set "showname=%orinput%" + +MD "%w_folder%" +call :getname +if "%vrename%" EQU "true" ( call :addtags_from_xci ) + +if "%vrepack%" EQU "nsp" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "nsp" -dc "%%f" ) +if "%vrepack%" EQU "xci" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "xci" -dc "%%f" ) +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "both" -dc "%%f" ) + +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 + +move "%w_folder%\*.xci" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\%filename%.nsp" ) + +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto aut_exit_choice + +:folder_ind_mode_fat32 +CD /d "%prog_dir%" +call :program_logo +echo -------------------------------------- +echo 自动模式。单文件打包已设置 +echo -------------------------------------- +echo. +::************* +::NSP文件 +::************* +for /r "%~1" %%f in (*.nsp) do ( +set "target=%%f" +if exist "%w_folder%" RD /s /q "%w_folder%" >NUL 2>&1 + +MD "%w_folder%" +MD "%w_folder%\secure" + +set "filename=%%~nf" +set "orinput=%%f" +set "showname=%orinput%" +call :processing_message +REM echo %safe_var%>safe.txt +call :squirrell +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%%f" +if "%zip_restore%" EQU "true" ( set "ziptarget=%%f" ) +if "%zip_restore%" EQU "true" ( call :makezip ) +call :getname +REM setlocal enabledelayedexpansion +REM set vpack=!vrepack! +REM endlocal & ( set "vpack=!vrepack!" ) + +REM if "%trn_skip%" EQU "true" ( call :check_titlerights ) +if "%vrename%" EQU "true" ( call :addtags_from_nsp ) + +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) +setlocal enabledelayedexpansion +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +set "gefolder=%fold_output%\!end_folder!" +if "%oforg%" EQU "inline" ( set "gefolder=%fold_output%" ) +MD "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xci" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%gefolder%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%gefolder%\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +) + +::XCI文件 +for /r "%~1" %%f in (*.xci) do ( +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +set "filename=%%~nf" +set "orinput=%%f" +set "showname=%orinput%" +call :processing_message +MD "%w_folder%" +MD "%w_folder%\secure" +call :getname +echo ------------------------------------- +echo 从XCI提取安全分区 +echo ------------------------------------- +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%%f" +echo 完成 +if "%vrename%" EQU "true" ( call :addtags_from_xci ) +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) +setlocal enabledelayedexpansion +MD "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.xci" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%\!end_folder!" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\!end_folder!\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto aut_exit_choice + +::自动模式。多文件处理选项 +:folder_mult_mode +rem if "%fatype%" EQU "-fat fat32" goto folder_mult_mode_fat32 +call :program_logo +echo -------------------------------------- +echo 自动模式。多文件处理已设置 +echo -------------------------------------- +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" +if exist "%prog_dir%mlist.txt" del "%prog_dir%mlist.txt" >NUL 2>&1 + +echo -正在生成文件列表 +%pycommand% "%squirrel%" -t nsp xci nsz xcz -tfile "%prog_dir%mlist.txt" -ff "%~1" +echo 完成 + +if "%vrepack%" EQU "nsp" echo ...................................... +if "%vrepack%" EQU "nsp" echo 正在打包文件夹内容到NSP +if "%vrepack%" EQU "nsp" echo ...................................... +if "%vrepack%" EQU "nsp" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t cnsp -o "%w_folder%" -tfile "%prog_dir%mlist.txt" -roma %romaji% -dmul "calculate" ) +if "%vrepack%" EQU "nsp" echo. + +if "%vrepack%" EQU "xci" echo ...................................... +if "%vrepack%" EQU "xci" echo 正在打包文件夹内容到XCI +if "%vrepack%" EQU "xci" echo ...................................... +if "%vrepack%" EQU "xci" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t xci -o "%w_folder%" -tfile "%prog_dir%mlist.txt" -roma %romaji% -dmul "calculate" ) +if "%vrepack%" EQU "xci" echo. + +if "%vrepack%" EQU "both" echo ...................................... +if "%vrepack%" EQU "both" echo 正在打包文件夹内容到NSP +if "%vrepack%" EQU "both" echo ...................................... +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t cnsp -o "%w_folder%" -tfile "%prog_dir%mlist.txt" -roma %romaji% -dmul "calculate" ) +if "%vrepack%" EQU "both" echo. + +if "%vrepack%" EQU "both" echo ...................................... +if "%vrepack%" EQU "both" echo 正在打包文件夹内容到XCI +if "%vrepack%" EQU "both" echo ...................................... +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t xci -o "%w_folder%" -tfile "%prog_dir%mlist.txt" -roma %romaji% -dmul "calculate" ) +if "%vrepack%" EQU "both" echo. + +setlocal enabledelayedexpansion +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +set "gefolder=%fold_output%\!end_folder!" +if "%oforg%" EQU "inline" ( set "gefolder=%fold_output%" ) +MD "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xci" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%gefolder%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -tfile "%w_folder%\filename.txt" -ifo "%w_folder%\archfolder" -archive "%gefolder%" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +call :thumbup +goto aut_exit_choice + +:folder_mult_mode_fat32 +CD /d "%prog_dir%" +call :program_logo +echo -------------------------------------- +echo 自动模式。多文件处理已设置 +echo -------------------------------------- +echo. +set "filename=%~n1" +set "orinput=%~f1" +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" +MD "%w_folder%\secure" +set "end_folder=%filename%" +set "filename=%filename%[multi]" +::NSP文件 +for /r "%~1" %%f in (*.nsp) do ( +set "showname=%orinput%" +call :processing_message +::echo %safe_var%>safe.txt +call :squirrell +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%%f" +if "%zip_restore%" EQU "true" ( set "ziptarget=%%f" ) +if "%zip_restore%" EQU "true" ( call :makezip ) +) + +::XCI文件 +for /r "%~1" %%f in (*.xci) do ( +echo ------------------------------------ +echo 从XCI提取安全分区 +echo ------------------------------------ +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%%f" +echo 完成 +) +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) +setlocal enabledelayedexpansion +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +set "gefolder=%fold_output%\!end_folder!" +if "%oforg%" EQU "inline" ( set "gefolder=%fold_output%" ) +MD "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xci" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%gefolder%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%gefolder%\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto aut_exit_choice + +:folder_packbyid +rem if "%fatype%" EQU "-fat fat32" goto folder_mult_mode_fat32 +call :program_logo +echo -------------------------------------- +echo 自动模式。通过ID打包已设置 +echo -------------------------------------- +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" +if exist "%prog_dir%mlist.txt" del "%prog_dir%mlist.txt" >NUL 2>&1 +set "mlistfol=%list_folder%\a_multi" +if not exist "%list_folder%" MD "%list_folder%" >NUL 2>&1 +if not exist "%mlistfol%" MD "%mlistfol%" >NUL 2>&1 + +echo - Generating filelist +%pycommand% "%squirrel%" -t nsp xci -tfile "%prog_dir%mlist.txt" -ff "%~1" +echo 完成 +echo - 正在分割文件列表 +%pycommand% "%squirrel%" -splid "%mlistfol%" -tfile "%prog_dir%mlist.txt" +if "%vrepack%" EQU "nsp" set "vrepack=cnsp" +if "%vrepack%" EQU "both" set "vrepack=cboth" +goto m_process_jobs2 + +:aut_rebuild_nodeltas +call :program_logo +echo -------------------------------------- +echo 自动模式。重建不包含增量部分 +echo -------------------------------------- +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" +if exist "%prog_dir%list.txt" del "%prog_dir%list.txt" >NUL 2>&1 +%pycommand% "%squirrel%" -t nsp xci -tfile "%prog_dir%list.txt" -ff "%~1" +echo 完成 +goto s_KeyChange_skip + +:aut_rebuild_nsp +call :program_logo +echo -------------------------------------- +echo 自动模式。按cnmt顺序重新生成nsp +echo -------------------------------------- +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" +if exist "%prog_dir%list.txt" del "%prog_dir%list.txt" >NUL 2>&1 +%pycommand% "%squirrel%" -t nsp xci -tfile "%prog_dir%list.txt" -ff "%~1" +echo 完成 +goto s_KeyChange_skip + +:file +call :program_logo +if "%~x1"==".nsp" ( goto nsp ) +if "%~x1"==".xci" ( goto xci ) +if "%~x1"==".nsz" ( goto nsp ) +if "%~x1"==".xcz" ( goto xci ) +if "%~x1"==".*" ( goto other ) +:other +echo 拖动不包含有效文件。程序只接受XCI或NSP文件。 +echo 您将被重定向到手动模式。 +pause +goto manual + +:nsp +rem if "%fatype%" EQU "-fat fat32" goto file_nsp_fat32 +set "orinput=%~f1" +set "filename=%~n1" +set "target=%~1" +set "showname=%orinput%" + +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +call :squirrell + +if "%zip_restore%" EQU "true" ( set "ziptarget=%~1" ) +if "%zip_restore%" EQU "true" ( call :makezip ) +MD "%w_folder%" +call :getname +if "%vrename%" EQU "true" call :addtags_from_nsp + +if "%vrepack%" EQU "nsp" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "nsp" -dc "%~1" ) +if "%vrepack%" EQU "xci" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "xci" -dc "%~1" ) +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "both" -dc "%~1" ) + +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 + +move "%w_folder%\*.xci" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\%filename%.nsp" ) + +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +goto aut_exit_choice + +:file_nsp_fat32 +CD /d "%prog_dir%" +set "orinput=%~f1" +set "filename=%~n1" +set "target=%~1" +set "showname=%orinput%" +call :processing_message +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +call :squirrell +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%~1" +if "%zip_restore%" EQU "true" ( set "ziptarget=%~1" ) +if "%zip_restore%" EQU "true" ( call :makezip ) +call :getname +if "%vrename%" EQU "true" call :addtags_from_nsp +::echo "%vrepack%" +::echo "%nsp_lib%" +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) +setlocal enabledelayedexpansion +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +set "gefolder=%fold_output%\!end_folder!" +if "%oforg%" EQU "inline" ( set "gefolder=%fold_output%" ) +MD "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xci" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%gefolder%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%gefolder%\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +goto aut_exit_choice + +:xci +rem if "%fatype%" EQU "-fat fat32" goto file_xci_fat32 +set "filename=%~n1" +set "orinput=%~f1" +set "showname=%orinput%" + +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" +MD "%w_folder%\secure" +call :getname + +if "%vrename%" EQU "true" call :addtags_from_xci + +if "%vrepack%" EQU "nsp" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "nsp" -dc "%~1" ) +if "%vrepack%" EQU "xci" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "xci" -dc "%~1" ) +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "both" -dc "%~1" ) + +MD "%fold_output%\" >NUL 2>&1 + +move "%w_folder%\*.xci" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\%filename%.nsp" ) + +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +goto aut_exit_choice + +:file_xci_fat32 +CD /d "%prog_dir%" +set "filename=%~n1" +set "orinput=%~f1" +set "showname=%orinput%" +call :processing_message +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" +MD "%w_folder%\secure" +call :getname +echo ------------------------------------ +echo 从XCI提取安全分区 +echo ------------------------------------ +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%~1" +echo 完成 +if "%vrename%" EQU "true" call :addtags_from_xci +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) +setlocal enabledelayedexpansion +if exist "%fold_output%\!end_folder!" RD /S /Q "%fold_output%\!end_folder!" >NUL 2>&1 +MD "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.xci" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%\!end_folder!" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\!end_folder!\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +goto aut_exit_choice + +:aut_exit_choice +if /i "%va_exit%"=="true" echo 程序将立即关闭 +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",进入模式选择 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto aut_exit_choice +exit +:manual +endlocal +cls +call :program_logo +echo ******************************** +echo 您已进入手动模式 +echo ******************************** +if "%manual_intro%" EQU "indiv" ( goto normalmode ) +if "%manual_intro%" EQU "multi" ( goto multimode ) +if "%manual_intro%" EQU "split" ( goto SPLMODE ) +::if "%manual_intro%" EQU "update" ( goto UPDMODE ) +goto manual_Reentry + +:manual_Reentry +cls +if "%NSBMODE%" EQU "legacy" call "%prog_dir%ztools\LEGACY.bat" +call :program_logo +ECHO ....................................................... +echo 输入 "1" 单文件处理 (XCI和NSP互转:常用功能) +echo 输入 "2" 多文件处理 (XCI整合用:常用功能) +echo 输入 "3" 文件拆分 (XCI或NSP拆包:常用功能) +echo 输入 "4" 文件信息查询 (查询游戏版本信息:常用功能) +echo 输入 "5" 数据库构建 (重建游戏文件数据库:不常用) +echo 输入 "6" 高级选项 (修补链接账户等:常用功能) +echo 输入 "7" 合并模式 (文件合并:不常用) +echo 输入 "8" 压缩和解压 (XCI和XCZ以及NSP和NSZ的互转:常用功能) +echo 输入 "9" 文件还原 (从备份文件恢复原始包:不常用) +echo 输入 "10" 文件管理 (功能暂不完善) +echo 输入 "0" 配置选项 (程序配置:常用功能) +echo. +echo 输入"D",进入谷歌网盘模式 +echo 输入"M",进入MTP模式 +echo 输入"L",进入传统模式 +echo 输入"I",进入界面配置 +echo 输入"S",进入服务器配置 +echo ....................................................... +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="1" goto normalmode +if /i "%bs%"=="2" goto multimode +if /i "%bs%"=="3" goto SPLMODE +if /i "%bs%"=="4" goto INFMODE +if /i "%bs%"=="5" goto DBMODE +if /i "%bs%"=="6" goto ADVmode +if /i "%bs%"=="7" goto JOINmode +if /i "%bs%"=="8" goto ZSTDmode +if /i "%bs%"=="9" goto RSTmode +if /i "%bs%"=="10" goto MNGmode +if /i "%bs%"=="M" goto MTPMode +if /i "%bs%"=="D" goto DriveMode +if /i "%bs%"=="L" goto LegacyMode +if /i "%bs%"=="I" goto InterfaceTrigger +if /i "%bs%"=="S" goto ServerTrigger +if /i "%bs%"=="0" goto OPT_CONFIG +goto manual_Reentry + +:ADVmode +call "%prog_dir%ztools\ADV.bat" +goto manual_Reentry +:JOINmode +call "%prog_dir%ztools\JOINER.bat" +goto manual_Reentry +:ZSTDmode +call "%prog_dir%ztools\ZSTD.bat" +goto manual_Reentry +:RSTmode +call "%prog_dir%ztools\RST.bat" +goto manual_Reentry +:MNGmode +call "%prog_dir%ztools\MNG.bat" +goto manual_Reentry +:LegacyMode +call "%prog_dir%ztools\LEGACY.bat" +goto manual_Reentry +:MTPMode +call "%prog_dir%ztools\MtpMode.bat" +goto manual_Reentry +:DriveMode +call "%prog_dir%ztools\DriveMode.bat" +goto manual_Reentry +:InterfaceTrigger +call Interface.bat +goto manual_Reentry +:ServerTrigger +call Server.bat +goto manual_Reentry +REM ////////////////////////////////////////////////// +REM ///////////////////////////////////////////////// +REM 手动模式开始。单文件处理 +REM ///////////////////////////////////////////////// +REM //////////////////////////////////////////////// +:normalmode +cls +call :program_logo +echo ----------------------------------------------- +echo 单文件处理已激活 +echo ----------------------------------------------- +if exist "list.txt" goto prevlist +goto manual_INIT +:prevlist +set conta=0 +for /f "tokens=*" %%f in (list.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (list.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del list.txt ) +endlocal +if not exist "list.txt" goto manual_INIT +ECHO ....................................................... +ECHO 发现了以前的列表, 你想做什么? +:prevlist0 +ECHO ....................................................... +echo 输入"1",从上一列表自动开始处理 +echo 输入"2",删除列表并创建新列表. +echo 输入"3",继续构建上一个列表 +echo ....................................................... +echo 注意: 输入"3",在开始处理文件之前,您将看到上一个列表,并且 +echo 您可以添加或者删除内容到列表里。 +echo. +ECHO ************************************************* +echo 或者输入"0",以返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="3" goto showlist +if /i "%bs%"=="2" goto delist +if /i "%bs%"=="1" goto start_cleaning +if /i "%bs%"=="0" goto manual_Reentry +echo. +echo BAD CHOICE +goto prevlist0 +:delist +del list.txt +cls +call :program_logo +echo ----------------------------------------------- +echo 单文件处理已激活 +echo ----------------------------------------------- +echo .................................. +echo 您已决定创建一个新的列表 +echo .................................. +:manual_INIT +endlocal +ECHO *********************************************** +echo 输入"1",将文件夹添加到列表 +echo 输入"2",将文件添加到列表 +echo 输入"3",通过本地文件库,将文件添加到列表 +echo 输入"4",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"0",返回模式选择菜单 +ECHO *********************************************** +echo. +%pycommand% "%squirrel%" -t nsp xci nsz nsx xcz -tfile "%prog_dir%list.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" goto manual_Reentry +if /i "%eval%"=="1" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%list.txt" mode=folder ext="nsp xci nsz nsx xcz" ) 2>&1>NUL +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%list.txt" mode=file ext="nsp xci nsz nsx xcz" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%list.txt" "extlist=nsp xci nsz nsx xcz" ) +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%list.txt" "extlist=nsp xci nsz nsx xcz" ) +goto checkagain +echo. +:checkagain +echo 你想做什么? +echo ...................................................................... +echo "拖动另一个文件或文件夹,然后按回车键将项目添加到列表中" +echo. +echo 输入"1",开始处理 +echo 输入"2",将另一个文件夹添加到列表 +echo 输入"3",将另一个文件添加到列表 +echo 输入"4",通过本地文件库,将文件添加到列表 +echo 输入"5",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"e",退出 +echo 输入"i",查看要处理的文件列表 +echo 输入"r",删除一些文件(从底部开始计数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或者输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" -t nsp xci nsz nsx xcz -tfile "%prog_dir%list.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal + +if /i "%eval%"=="0" goto manual_Reentry +if /i "%eval%"=="1" goto start_cleaning +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%list.txt" mode=folder ext="nsp xci nsz nsx xcz" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%list.txt" mode=file ext="nsp xci nsz nsx xcz" ) 2>&1>NUL +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%list.txt" "extlist=nsp xci nsz nsx xcz" ) +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%list.txt" "extlist=nsp xci nsz nsx xcz" ) +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto showlist +if /i "%eval%"=="r" goto r_files +if /i "%eval%"=="z" del list.txt + +goto checkagain + +:r_files +set /p bs="输入要删除的文件数(从底部开始): " +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (list.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:update_list1 +if !pos1! GTR !pos2! ( goto :update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :update_list1 +:update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>list.txt.new +endlocal +move /y "list.txt.new" "list.txt" >nul +endlocal + +:showlist +cls +call :program_logo +echo ------------------------------------------------- +echo 单文件处理已激活 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (list.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (list.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 您已添加了 !conta! 个要处理的文件 +echo ................................................. +endlocal + +goto checkagain + +:s_cl_wrongchoice +echo 错误的选择 +echo ............ +:start_cleaning +echo ******************************************************* +echo 接下来选择您要执行的操作 +echo ******************************************************* +echo 输入"1",重新打包为NSP +echo 输入"2",重新打包为XCI +echo 输入"3",重新打包NSP和XCI +echo. +echo 特殊选项: +echo 输入"4",删除NSP文件中的增量 +echo 输入"5",重命名XCI或NSP文件 +echo 输入"6",XCI超级裁剪\裁剪\不裁剪 +echo 输入"7",按cnmt顺序重建nsp +echo 输入"8",激活验证 +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="1" set "vrepack=nsp" +if /i "%bs%"=="2" set "vrepack=xci" +if /i "%bs%"=="3" set "vrepack=both" +if /i "%bs%"=="4" set "vrepack=nodelta" +if /i "%bs%"=="4" goto s_KeyChange_skip +if /i "%bs%"=="5" set "vrepack=renamef" +if /i "%bs%"=="5" goto rename +if /i "%bs%"=="6" goto s_trimmer_selection +if /i "%bs%"=="7" set "vrepack=rebuild" +if /i "%bs%"=="7" goto s_KeyChange_skip +if /i "%bs%"=="8" set "vrepack=verify" +if /i "%bs%"=="8" goto s_vertype +if %vrepack%=="none" goto s_cl_wrongchoice +:s_RSV_wrongchoice +if /i "%skipRSVprompt%"=="true" set "patchRSV=-pv false" +if /i "%skipRSVprompt%"=="true" goto s_KeyChange_skip +echo ******************************************************* +echo 是否要魔改游戏所需的系统版本 +echo ******************************************************* +echo 如果您选择魔改系统版本,它将会被设置为相应的NCA加密 +echo 所以系统只会在系统版本和魔改软件版本不匹配时,请求更新系统 +echo. +echo 输入"0",不魔改游戏所需系统版本 +echo 输入"1",魔改游戏所需系统版本 +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set "patchRSV=none" +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="0" set "patchRSV=-pv false" +if /i "%bs%"=="1" set "patchRSV=-pv true" +if /i "%patchRSV%"=="none" echo 错误的选择 +if /i "%patchRSV%"=="none" goto s_RSV_wrongchoice +if /i "%bs%"=="0" goto s_KeyChange_skip + +:s_KeyChange_wrongchoice +echo ******************************************************* +echo 设置魔改的最大系统版本 +echo ******************************************************* +echo 取决于您的选择,如果魔改的密钥值大于程序中指定的值, +echo 魔改的密钥和RSV将会低于程序最低系统版本要求。 +echo 程序将永远不能低于系统固件要求运行。 +echo. +echo 输入"f",不魔改 +echo 输入"0",魔改版本FW 1.0 +echo 输入"1",魔改版本FW 2.0-2.3 +echo 输入"2",魔改版本FW 3.0 +echo 输入"3",魔改版本FW 3.0.1-3.02 +echo 输入"4",魔改版本FW 4.0.0-4.1.0 +echo 输入"5",魔改版本FW 5.0.0-5.1.0 +echo 输入"6",魔改版本FW 6.0.0-6.1.0 +echo 输入"7",魔改版本FW 6.2.0 +echo 输入"8",魔改版本FW 7.0.0-8.0.1 +echo 输入"9",魔改版本FW 8.1.0 +echo 输入"10",魔改版本FW 9.0.0-9.0.1 +echo 输入"11",魔改版本FW 9.1.0 +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set "vkey=none" +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="f" set "vkey=-kp false" +if /i "%bs%"=="0" set "vkey=-kp 0" +if /i "%bs%"=="0" set "capRSV=--RSVcap 0" +if /i "%bs%"=="1" set "vkey=-kp 1" +if /i "%bs%"=="1" set "capRSV=--RSVcap 65796" +if /i "%bs%"=="2" set "vkey=-kp 2" +if /i "%bs%"=="2" set "capRSV=--RSVcap 201327002" +if /i "%bs%"=="3" set "vkey=-kp 3" +if /i "%bs%"=="3" set "capRSV=--RSVcap 201392178" +if /i "%bs%"=="4" set "vkey=-kp 4" +if /i "%bs%"=="4" set "capRSV=--RSVcap 268435656" +if /i "%bs%"=="5" set "vkey=-kp 5" +if /i "%bs%"=="5" set "capRSV=--RSVcap 335544750" +if /i "%bs%"=="6" set "vkey=-kp 6" +if /i "%bs%"=="6" set "capRSV=--RSVcap 402653494" +if /i "%bs%"=="7" set "vkey=-kp 7" +if /i "%bs%"=="7" set "capRSV=--RSVcap 404750336" +if /i "%bs%"=="8" set "vkey=-kp 8" +if /i "%bs%"=="8" set "capRSV=--RSVcap 469762048" +if /i "%bs%"=="9" set "vkey=-kp 9" +if /i "%bs%"=="9" set "capRSV=--RSVcap 537919488" +if /i "%bs%"=="10" set "vkey=-kp 10" +if /i "%bs%"=="10" set "capRSV=--RSVcap 603979776" +if /i "%bs%"=="11" set "vkey=-kp 11" +if /i "%bs%"=="11" set "capRSV=--RSVcap 605028352" +if /i "%vkey%"=="none" echo 错误的选择 +if /i "%vkey%"=="none" goto s_KeyChange_wrongchoice +goto s_KeyChange_skip + +:s_trimmer_selection +echo ******************************************************* +echo 超级清理、清理、不清理 +echo ******************************************************* +echo 描述: +echo - 超级清理 +echo 删除系统固件更新,清空更新分区, +echo 删除最终和中间填充,删除LOGO分区, +echo 删除游戏更新,保留已有的游戏证书(适用于tinfoil安装) +echo - 超级清理但保留游戏更新数据 +echo 和超级清理一样,但保留游戏更新数据 +echo - 清理 +echo 删除最后的填充(空数据) +echo - 不清理 +echo 不执行数据清理 +echo. +echo 输入"1",超级清理 +echo 输入"2",超级清理但保留游戏更新数据 +echo 输入"3",清理 +echo 输入"4",不清理 +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set "vrepack=none" +if /i "%bs%"=="1" set "vrepack=xci_supertrimmer" +if /i "%bs%"=="2" set "vrepack=xci_supertrimmer_keep_upd" +if /i "%bs%"=="3" set "vrepack=xci_trimmer" +if /i "%bs%"=="4" set "vrepack=xci_untrimmer" +if /i "%vrepack%"=="none" echo 错误的选择 +if /i "%vrepack%"=="none" goto s_trimmer_selection +goto s_KeyChange_skip + +:s_vertype +echo ******************************************************* +echo 验证类型 +echo ******************************************************* +echo 选择验证的级别. +echo 解密 - 文件可读,票证正确,没有文件丢失 +echo 签名 - 检查Nintendo签名的标头,为NSCB修改计算原始标头 +echo 哈希 - 检查与文件名匹配的文件当前和原始哈希值是否一致 +echo. +echo 注意:如果您通过文件流方法读取远程服务上的文件,则推荐使用解密或签名 +echo. +echo 输入 "1" 使用解密验证(快速) +echo 输入 "2" 使用解密+签名验证(快速) +echo 输入 "3" 使用解密+签名+HASH验证(慢) +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set "verif=none" +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="1" set "verif=lv1" +if /i "%bs%"=="2" set "verif=lv2" +if /i "%bs%"=="3" set "verif=lv3" +if /i "%verif%"=="none" echo 错误的选择 +if /i "%verif%"=="none" echo. +if /i "%verif%"=="none" goto s_vertype + +:s_KeyChange_skip +echo Filtering extensions from list according to options chosen +if "%vrepack%" EQU "xci_supertrimmer" ( %pycommand% "%squirrel%" -lib_call listmanager filter_list "%prog_dir%list.txt","ext=xci","token=False",Print="False" ) +if "%vrepack%" EQU "xci_supertrimmer_keep_upd" ( %pycommand% "%squirrel%" -lib_call listmanager filter_list "%prog_dir%list.txt","ext=xci","token=False",Print="False" ) +if "%vrepack%" EQU "xci_trimmer" ( %pycommand% "%squirrel%" -lib_call listmanager filter_list "%prog_dir%list.txt","ext=xci","token=False",Print="False" ) +if "%vrepack%" EQU "xci_untrimmer" ( %pycommand% "%squirrel%" -lib_call listmanager filter_list "%prog_dir%list.txt","ext=xci","token=False",Print="False" ) +if "%vrepack%" EQU "rebuild" ( %pycommand% "%squirrel%" -lib_call listmanager filter_list "%prog_dir%list.txt","ext=nsp nsz","token=False",Print="False" ) +if "%vrepack%" EQU "nodelta" ( %pycommand% "%squirrel%" -lib_call listmanager filter_list "%prog_dir%list.txt","ext=nsp nsz","token=False",Print="False" ) +if "%fatype%" EQU "-fat fat32" echo Fat32 selected, removing nsz and xcz from input list +if "%fatype%" EQU "-fat fat32" ( %pycommand% "%squirrel%" -lib_call listmanager filter_list "%prog_dir%list.txt","ext=nsp nsx xci","token=False",Print="False" ) +cls +call :program_logo + +for /f "tokens=*" %%f in (list.txt) do ( +set "name=%%~nf" +set "filename=%%~nxf" +set "orinput=%%f" +set "ziptarget=%%f" + +if "%%~nxf"=="%%~nf.nsp" call :nsp_manual +if "%%~nxf"=="%%~nf.nsz" call :nsp_manual +if "%%~nxf"=="%%~nf.xci" call :xci_manual +if "%%~nxf"=="%%~nf.xcz" call :xci_manual +%pycommand% "%squirrel%" --strip_lines "%prog_dir%list.txt" "1" "true" +rem call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:rename +:s_rename_wrongchoice1 +echo. +echo ******************************************************* +echo 重命名类型 +echo ******************************************************* +echo 正常模式: +echo 输入"1",始终重命名 +echo 输入"2",如果存在[TITLEID]则不重命名 +echo 输入"3",如果[TITLEID]等于计算值不重命名 +echo 输入"4",仅添加ID +echo 输入"5",添加ID+标记并将名称保留到[ +echo. +echo Sanitize: +echo 输入"6",从文件名中删除错误字符 +echo 输入"7",将日语/汉语转换为罗马字 +echo. +echo 清理标签: +echo 输入"8",从文件名中删除[]标签 +echo 输入"9",从文件名中删除()标签 +echo 输入"10",从文件名中删除[]和()标签 +echo 输入"11",从第一个[标签开始删除TITLE +echo 输入"12",从第一个(标签开始删除TITLE +echo. +ECHO ****************************************** +echo 或输入"0",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set "renmode=none" +if /i "%bs%"=="0" goto checkagain +if /i "%bs%"=="1" set "renmode=force" +if /i "%bs%"=="1" set "oaid=false" +if /i "%bs%"=="2" set "renmode=skip_corr_tid" +if /i "%bs%"=="2" set "oaid=false" +if /i "%bs%"=="3" set "renmode=skip_if_tid" +if /i "%bs%"=="3" set "oaid=false" +if /i "%bs%"=="4" set "renmode=skip_corr_tid" +if /i "%bs%"=="4" set "oaid=true" +if /i "%bs%"=="5" set "renmode=skip_corr_tid" +if /i "%bs%"=="5" set "oaid=idtag" +if /i "%bs%"=="6" goto sanitize +if /i "%bs%"=="7" goto romaji + +if /i "%bs%"=="8" set "tagtype=[]" +if /i "%bs%"=="8" goto filecleantags +if /i "%bs%"=="9" set "tagtype=()" +if /i "%bs%"=="9" goto filecleantags +if /i "%bs%"=="10" set "tagtype=false" +if /i "%bs%"=="10" goto filecleantags +if /i "%bs%"=="11" set "tagtype=[" +if /i "%bs%"=="11" goto filecleantags +if /i "%bs%"=="12" set "tagtype=(" +if /i "%bs%"=="12" goto filecleantags + +if /i "%renmode%"=="none" echo 错误的选择 +if /i "%renmode%"=="none" goto s_rename_wrongchoice1 +echo. +:s_rename_wrongchoice2 +echo ******************************************************* +echo 添加版本号 +echo ******************************************************* +echo 将内容版本号添加到文件名 +echo. +echo 输入"1",添加版本号 +echo 输入"2",不添加版本号 +echo 输入"3",如果版本=0,不在XCI中添加版本 +echo. +ECHO ********************************************* +echo 或输入"b",返回重命名类型 +echo 或输入"0",返回列表选项 +ECHO ********************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set "nover=none" +if /i "%bs%"=="0" goto checkagain +if /i "%bs%"=="b" goto s_rename_wrongchoice1 +if /i "%bs%"=="1" set "nover=false" +if /i "%bs%"=="2" set "nover=true" +if /i "%bs%"=="3" set "nover=xci_no_v0" +if /i "%nover%"=="none" echo 错误的选择 +if /i "%nover%"=="none" goto s_rename_wrongchoice2 +echo. +:s_rename_wrongchoice3 +echo ******************************************************* +echo 添加语言字符串 +echo ******************************************************* +echo 为游戏和更新添加语言标记 +echo. +echo 输入"1",不添加语言字符串 +echo 输入"2",添加语言字符串 +echo. +echo 注意:无法从DLCs中读取语言, +echo 因此此选项不会影响它们 +echo. +ECHO ********************************************* +echo 或输入"b",返回添加版本号 +echo 或输入"0",返回列表选项 +ECHO ********************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set "addlangue=none" +if /i "%bs%"=="0" goto checkagain +if /i "%bs%"=="b" goto s_rename_wrongchoice2 +if /i "%bs%"=="1" set "addlangue=false" +if /i "%bs%"=="2" set "addlangue=true" +if /i "%addlangue%"=="none" echo 错误的选择 +if /i "%addlangue%"=="none" goto s_rename_wrongchoice3 +echo. +:s_rename_wrongchoice4 +echo ******************************************************* +echo DLC命名回滚 +echo ******************************************************* +echo 当前版本将dlc名称在nutdb检索,此选项说明如果无法检索到名称, +echo 则回滚为空。 +echo. +echo 通常命令格式 基本名 [内容名] +echo 选项3格式 基本名 [内容名] [DLC号] +echo. +echo 输入"1",保持DLC名称 +echo 输入"2",重命名为DLC编号 +echo 输入"3",以保持名称并添加dlc编号为标签 +echo. +ECHO ********************************************* +echo 或输入"b",返回添加保留DLC名称 +echo 或输入"0",返回列表选项 +ECHO ********************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set "dlcrname=none" +if /i "%bs%"=="0" goto checkagain +if /i "%bs%"=="b" goto s_rename_wrongchoice3 +if /i "%bs%"=="1" set "dlcrname=false" +if /i "%bs%"=="2" set "dlcrname=true" +if /i "%bs%"=="3" set "dlcrname=tag" +if /i "%dlcrname%"=="none" echo 错误的选择 +if /i "%dlcrname%"=="none" goto s_rename_wrongchoice4 +echo. +cls +call :program_logo +set "workers=-threads 1" +for /f "tokens=*" %%f in (list.txt) do ( +%pycommand% "%squirrel%" -renf "single" -tfile "%prog_dir%list.txt" -t nsp xci nsx nsz xcz -renm %renmode% -nover %nover% -oaid %oaid% -addl %addlangue% -roma %romaji% -dlcrn %dlcrname% %workers% +if "%workers%" EQU "-threads 1" ( %pycommand% "%squirrel%" --strip_lines "%prog_dir%list.txt" "1" "true" ) +if "%workers%" NEQ "-threads 1" ( call :renamecheck ) +rem call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:renamecheck +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (list.txt) do ( +set /a conta=!conta! + 1 +) +if !conta! LEQ 0 ( del list.txt ) +endlocal +if not exist "list.txt" goto s_exit_choice +exit /B + +:sanitize +cls +call :program_logo +for /f "tokens=*" %%f in (list.txt) do ( +%pycommand% "%squirrel%" -snz "single" -tfile "%prog_dir%list.txt" -t nsp xci nsx nsz xcz +%pycommand% "%squirrel%" --strip_lines "%prog_dir%list.txt" "1" "true" +rem call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:romaji +cls +call :program_logo +for /f "tokens=*" %%f in (list.txt) do ( +%pycommand% "%squirrel%" -roma "single" -tfile "%prog_dir%list.txt" -t nsp xci nsx nsz xcz +%pycommand% "%squirrel%" --strip_lines "%prog_dir%list.txt" "1" "true" +rem call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + + +:filecleantags +cls +call :program_logo +for /f "tokens=*" %%f in (list.txt) do ( +%pycommand% "%squirrel%" -cltg "single" -tfile "%prog_dir%list.txt" -t nsp xci nsx nsz xcz -tgtype "%tagtype%" +%pycommand% "%squirrel%" --strip_lines "%prog_dir%list.txt" "1" "true" +rem call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:s_exit_choice +if exist list.txt del list.txt +if /i "%va_exit%"=="true" echo 程序将立即关闭 +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择菜单 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto s_exit_choice + +:nsp_manual +rem if "%fatype%" EQU "-fat fat32" goto nsp_manual_fat32 +rem set "filename=%name%" +rem set "showname=%orinput%" +if "%zip_restore%" EQU "true" ( call :makezip ) +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" >NUL 2>&1 +call :squirrell + +if "%vrename%" EQU "true" call :addtags_from_nsp + +if "%vrepack%" EQU "nsp" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "nsp" -dc "%orinput%" -tfile "%prog_dir%list.txt") +if "%vrepack%" EQU "xci" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "xci" -dc "%orinput%" -tfile "%prog_dir%list.txt") +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "both" -dc "%orinput%" -tfile "%prog_dir%list.txt") +if "%vrepack%" EQU "nodelta" ( %pycommand% "%squirrel%" %buffer% --xml_gen "true" -o "%w_folder%" -tfile "%prog_dir%list.txt" --erase_deltas "") +if "%vrepack%" EQU "rebuild" ( %pycommand% "%squirrel%" %buffer% %skdelta% --xml_gen "true" -o "%w_folder%" -tfile "%prog_dir%list.txt" --rebuild_nsp "") +if "%vrepack%" EQU "verify" ( %pycommand% "%squirrel%" %buffer% -vt "%verif%" -tfile "%prog_dir%list.txt" -v "") +if "%vrepack%" EQU "verify" ( goto end_nsp_manual ) + +move "%w_folder%\*.xci" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\%filename%.nsp" ) + +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +call :delay +goto end_nsp_manual + +:nsp_manual_fat32 +CD /d "%prog_dir%" +set "filename=%name%" +set "showname=%orinput%" +call :processing_message + +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +call :squirrell + +if "%vrepack%" EQU "zip" ( goto nsp_just_zip ) + +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%orinput%" + +:nsp_just_zip +if "%zip_restore%" EQU "true" ( call :makezip ) +call :getname +if "%vrename%" EQU "true" call :addtags_from_nsp +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "repack" "%w_folder%" "%%f") +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" "%%f") +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "repack" "%w_folder%" "%%f") +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" "%%f") +setlocal enabledelayedexpansion +if "%zip_restore%" EQU "true" ( goto :nsp_just_zip2 ) +if exist "%fold_output%\!end_folder!" RD /S /Q "%fold_output%\!end_folder!" >NUL 2>&1 +:nsp_just_zip2 +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +set "gefolder=%fold_output%\!end_folder!" +if "%oforg%" EQU "inline" ( set "gefolder=%fold_output%" ) +MD "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xci" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%gefolder%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%gefolder%\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +call :delay +goto end_nsp_manual + +:end_nsp_manual +exit /B + +:xci_manual +rem if "%fatype%" EQU "-fat fat32" goto xci_manual_fat32 +::XCI文件 +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" + +set "filename=%name%" +set "showname=%orinput%" + +if "%vrepack%" EQU "nsp" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "nsp" -dc "%orinput%" -tfile "%prog_dir%list.txt") +if "%vrepack%" EQU "xci" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "xci" -dc "%orinput%" -tfile "%prog_dir%list.txt") +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -o "%w_folder%" -t "both" -dc "%orinput%" -tfile "%prog_dir%list.txt") +if "%vrepack%" EQU "xci_supertrimmer" ( %pycommand% "%squirrel%" %buffer% -o "%w_folder%" -tfile "%prog_dir%list.txt" -xci_st "%orinput%") +if "%vrepack%" EQU "xci_supertrimmer_keep_upd" ( %pycommand% "%squirrel%" %buffer% -o "%w_folder%" -t "xci" -dc "%orinput%" -tfile "%prog_dir%list.txt" ) +if "%vrepack%" EQU "xci_trimmer" ( %pycommand% "%squirrel%" %buffer% -o "%w_folder%" -tfile "%prog_dir%list.txt" -xci_tr "%orinput%") +if "%vrepack%" EQU "xci_untrimmer" ( %pycommand% "%squirrel%" %buffer% -o "%w_folder%" -tfile "%prog_dir%list.txt" -xci_untr "%orinput%" ) +if "%vrepack%" EQU "verify" ( %pycommand% "%squirrel%" %buffer% -vt "%verif%" -tfile "%prog_dir%list.txt" -v "") +if "%vrepack%" EQU "verify" ( goto end_xci_manual ) + +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 + +move "%w_folder%\*.xci" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\%filename%.nsp" ) + +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +call :delay +goto end_xci_manual + +:xci_manual_fat32 +CD /d "%prog_dir%" +::XCI文件 +cls +if "%vrepack%" EQU "zip" ( goto end_xci_manual ) +set "filename=%name%" +call :program_logo +set "showname=%orinput%" +call :processing_message +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" +MD "%w_folder%\secure" +call :getname +echo ------------------------------------ +echo 从XCI提取安全分区 +echo ------------------------------------ +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%orinput%" +echo 完成 +if "%vrename%" EQU "true" call :addtags_from_xci +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) +setlocal enabledelayedexpansion +if exist "%fold_output%\!end_folder!" RD /S /Q "%fold_output%\!end_folder!" >NUL 2>&1 +MD "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.xci" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%\!end_folder!" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\!end_folder!\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +call :delay +goto end_xci_manual + +:end_xci_manual +exit /B + +:contador_NF +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (list.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍有 !conta! 个文件要处理 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// +:: MULTI-MODE +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// + +:multimode +if exist %w_folder% RD /S /Q "%w_folder%" >NUL 2>&1 +if exist "%list_folder%\a_multi" RD /S /Q "%list_folder%\a_multi" >NUL 2>&1 +cls +call :program_logo +echo ----------------------------------------------- +echo 多文件处理已激活 +echo ----------------------------------------------- +if exist "mlist.txt" del "mlist.txt" +:multi_manual_INIT +endlocal +set skip_list_split="false" +set "mlistfol=%list_folder%\m_multi" +echo 拖放文件或文件夹以创建列表 +echo 注意:记得在拖放文件或文件夹后按回车键 +echo. +ECHO *********************************************** +echo 输入"1",处理以前保存的作业 +echo 输入"2",将另一个文件夹添加到列表中 +echo 输入"3",将另一个文件添加到列表中 +echo 输入"4",通过本地文件库,将文件添加到列表 +echo 输入"5",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"0",返回模式选择菜单 +ECHO *********************************************** +echo. +%pycommand% "%squirrel%" -t nsp xci nsz xcz -tfile "%prog_dir%mlist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" goto manual_Reentry +if /i "%eval%"=="1" set skip_list_split="true" +if /i "%eval%"=="1" goto multi_start_cleaning +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mlist.txt" mode=folder ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mlist.txt" mode=file ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%mlist.txt" "extlist=nsp xci nsz xcz" ) +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%mlist.txt" "extlist=nsp xci nsz xcz" ) + +goto multi_checkagain +echo. +:multi_checkagain +set "mlistfol=%list_folder%\a_multi" +echo 你想做什么? +echo ...................................................................... +echo "拖动另一个文件或文件夹,然后按回车键将项目添加到列表中" +echo. +echo 输入"1",开始处理当前列表 +echo 输入"2",添加到保存的列表并处理它们 +echo 输入"3",保存列表以后处理 +echo 输入"4",添加另一个文件夹到列表 +echo 输入"5",添加另一个文件到列表 +echo 输入"6",通过本地文件库,将文件添加到列表 +echo 输入"7",通过folder-walker递归的方式,将文件添加到列表 +echo. +echo 输入"e",退出 +echo 输入"i",查看要处理的文件列表 +echo 输入"r",删除一些文件(从底部开始计数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" -t nsp xci nsz xcz -tfile "%prog_dir%mlist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal + +if /i "%eval%"=="0" goto manual_Reentry +if /i "%eval%"=="1" set "mlistfol=%list_folder%\a_multi" +if /i "%eval%"=="1" goto multi_start_cleaning +if /i "%eval%"=="2" set "mlistfol=%list_folder%\m_multi" +if /i "%eval%"=="2" goto multi_start_cleaning +if /i "%eval%"=="3" set "mlistfol=%list_folder%\m_multi" +if /i "%eval%"=="3" goto multi_saved_for_later +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mlist.txt" mode=folder ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mlist.txt" mode=file ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="6" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%mlist.txt" "extlist=nsp xci nsz xcz" ) +if /i "%eval%"=="7" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%mlist.txt" "extlist=nsp xci nsz xcz" ) +REM if /i "%eval%"=="2" goto multi_set_clogo +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto multi_showlist +if /i "%eval%"=="r" goto multi_r_files +if /i "%eval%"=="z" del mlist.txt + +goto multi_checkagain + +:multi_saved_for_later +if not exist "%list_folder%" MD "%list_folder%" >NUL 2>&1 +if not exist "%mlistfol%" MD "%mlistfol%" >NUL 2>&1 +echo 保存列表 +echo ...................................................................... +echo 输入"1",以将列表合并保存(单个多文件列表) +echo 输入"2",按文件的baseid保存为多个列表 +echo. +ECHO ******************************************* +echo 输入"b",继续构建列表 +echo 输入"0",返回选择菜单 +ECHO ******************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="b" goto multi_checkagain +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto multi_saved_for_later1 +if /i "%bs%"=="2" ( %pycommand% "%squirrel%" -splid "%mlistfol%" -tfile "%prog_dir%mlist.txt" ) +if /i "%bs%"=="2" del "%prog_dir%mlist.txt" +if /i "%bs%"=="2" goto multi_saved_for_later2 +echo 错误的选择!! +goto multi_saved_for_later +:multi_saved_for_later1 +echo. +echo 选择名称 +echo ...................................................................... +echo 列表将保存在您选择的列表目录名称( 路径是 "程序目录\list\m_multi") +echo. +set /p lname="请为列表命名: " +set lname=%lname:"=% +move /y "%prog_dir%mlist.txt" "%mlistfol%\%lname%.txt" >nul +echo. +echo JOB SAVED!!! +:multi_saved_for_later2 +echo. +echo 输入"0",返回模式选择菜单 +echo 输入"1",以创建其他列表 +echo 输入"2",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" echo. +if /i "%bs%"=="1" echo CREATE ANOTHER JOB +if /i "%bs%"=="1" goto multi_manual_INIT +if /i "%bs%"=="1" goto salida +goto multi_saved_for_later2 + +:multi_r_files +set /p bs="输入要删除的文件数(从底部开始): " +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (mlist.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:multi_update_list1 +if !pos1! GTR !pos2! ( goto :multi_update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :multi_update_list1 +:multi_update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>mlist.txt.new +endlocal +move /y "mlist.txt.new" "mlist.txt" >nul +endlocal + +:multi_showlist +cls +call :program_logo +echo ------------------------------------------------- +echo 多文件处理已激活 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (mlist.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (mlist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 您已添加了 !conta! 个要处理的文件 +echo ................................................. +endlocal + +goto multi_checkagain + +:m_cl_wrongchoice +echo 错误的选择 +echo ............ +:multi_start_cleaning +echo ******************************************************* +echo 接下来选择您要执行的操作 +echo ******************************************************* +echo 标准加密选项: +echo 输入"1",重新打包列表为无票据的NSP +echo 输入"2",重新打包列表为XCI +echo 输入"3",重新打包列表为无票据的NSP和XCI +echo. +echo 特殊选项: +echo 输入"4",重新打包列表为NSP(未修改NCA) +echo 输入"5",重新打包列表为NSP和XCI(未修改NCA) +echo. +ECHO ***************************************** +echo 或输入"b",返回选项列表 +ECHO ***************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="b" goto multi_checkagain +if /i "%bs%"=="1" set "vrepack=cnsp" +if /i "%bs%"=="2" set "vrepack=xci" +if /i "%bs%"=="3" set "vrepack=cboth" + +if /i "%bs%"=="4" set "vrepack=nsp" +if /i "%bs%"=="4" set "skipRSVprompt=true" +if /i "%bs%"=="5" set "vrepack=both" + +if %vrepack%=="none" goto m_cl_wrongchoice +:m_RSV_wrongchoice +if /i "%skipRSVprompt%"=="true" set "patchRSV=-pv false" +if /i "%skipRSVprompt%"=="true" set "vkey=-kp false" +if /i "%skipRSVprompt%"=="true" goto m_KeyChange_skip +echo ******************************************************* +echo 是否要魔改所需的系统版本 +echo ******************************************************* +echo 如果您选择打补丁,它将被设置为匹配的nca加密 +echo 因此仅在必要时才要求更新系统 +echo. +echo 输入"0",不魔改 +echo 输入"1",魔改 +echo. +ECHO ***************************************** +echo 或输入"b",返回选项列表 +ECHO ***************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set patchRSV=none +if /i "%bs%"=="b" goto multi_checkagain +if /i "%bs%"=="0" set "patchRSV=-pv false" +if /i "%bs%"=="0" set "vkey=-kp false" +if /i "%bs%"=="1" set "patchRSV=-pv true" +if /i "%patchRSV%"=="none" echo 错误的选择 +if /i "%patchRSV%"=="none" goto m_RSV_wrongchoice +if /i "%bs%"=="0" goto m_KeyChange_skip + +:m_KeyChange_wrongchoice +echo ******************************************************* +echo 魔改程序已激活 +echo ******************************************************* +echo 这并不总能降低系统要求。 +echo. +echo 输入"f",不魔改 +echo 输入"0",魔改版本FW 1.0 +echo 输入"1",魔改版本FW 2.0-2.3 +echo 输入"2",魔改版本FW 3.0 +echo 输入"3",魔改版本FW 3.0.1-3.02 +echo 输入"4",魔改版本FW 4.0.0-4.1.0 +echo 输入"5",魔改版本FW 5.0.0-5.1.0 +echo 输入"6",魔改版本FW 6.0.0-6.1.0 +echo 输入"7",魔改版本FW 6.2.0 +echo 输入"8",魔改版本FW 7.0.0-8.0.1) +echo 输入"9",魔改版本FW 8.1.0) +echo 输入"10",魔改版本FW 9.0.0-9.0.1) +echo 输入"11",魔改版本FW 9.1.0) +echo. +ECHO ***************************************** +echo 或输入"b",返回选项列表 +ECHO ***************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set "vkey=none" +if /i "%bs%"=="b" goto multi_checkagain +if /i "%bs%"=="f" set "vkey=-kp false" +if /i "%bs%"=="0" set "vkey=-kp 0" +if /i "%bs%"=="0" set "capRSV=--RSVcap 0" +if /i "%bs%"=="1" set "vkey=-kp 1" +if /i "%bs%"=="1" set "capRSV=--RSVcap 65796" +if /i "%bs%"=="2" set "vkey=-kp 2" +if /i "%bs%"=="2" set "capRSV=--RSVcap 201327002" +if /i "%bs%"=="3" set "vkey=-kp 3" +if /i "%bs%"=="3" set "capRSV=--RSVcap 201392178" +if /i "%bs%"=="4" set "vkey=-kp 4" +if /i "%bs%"=="4" set "capRSV=--RSVcap 268435656" +if /i "%bs%"=="5" set "vkey=-kp 5" +if /i "%bs%"=="5" set "capRSV=--RSVcap 335544750" +if /i "%bs%"=="6" set "vkey=-kp 6" +if /i "%bs%"=="6" set "capRSV=--RSVcap 402653494" +if /i "%bs%"=="7" set "vkey=-kp 7" +if /i "%bs%"=="7" set "capRSV=--RSVcap 404750336" +if /i "%bs%"=="8" set "vkey=-kp 8" +if /i "%bs%"=="8" set "capRSV=--RSVcap 469762048" +if /i "%bs%"=="9" set "vkey=-kp 9" +if /i "%bs%"=="9" set "capRSV=--RSVcap 537919488" +if /i "%bs%"=="10" set "vkey=-kp 10" +if /i "%bs%"=="10" set "capRSV=--RSVcap 603979776" +if /i "%bs%"=="11" set "vkey=-kp 11" +if /i "%bs%"=="11" set "capRSV=--RSVcap 605028352" +if /i "%vkey%"=="none" echo 错误的选择 +if /i "%vkey%"=="none" goto m_KeyChange_wrongchoice + +:m_KeyChange_skip +if not exist "%list_folder%" MD "%list_folder%" >NUL 2>&1 +if not exist "%mlistfol%" MD "%mlistfol%" >NUL 2>&1 +if %skip_list_split% EQU "true" goto m_process_jobs +echo ******************************************************* +echo 您想如何处理这些文件? +echo ******************************************************* +echo 通过基本ID分离的模式能够识别与每个游戏相对应的内容, +echo 并从同一列表文件创建多XCI或多nsp文件 +echo. +echo 输入"1",将所有文件合并为一个文件 +echo 输入"2",通过baseid分离成多文件 +echo. +ECHO ***************************************** +echo 或输入"b",返回选项列表 +ECHO ***************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="b" goto multi_checkagain +if /i "%bs%"=="1" move /y "%prog_dir%mlist.txt" "%mlistfol%\mlist.txt" >nul +if /i "%bs%"=="1" goto m_process_jobs +if /i "%bs%"=="2" goto m_split_merge +goto m_KeyChange_skip + +:m_split_merge +if "%fatype%" EQU "-fat fat32" echo Fat32 selected, removing nsz and xcz from input list +if "%fatype%" EQU "-fat fat32" ( %pycommand% "%squirrel%" -lib_call listmanager filter_list "%prog_dir%mlist.txt","ext=nsp nsx xci","token=False",Print="False" ) +cls +call :program_logo +%pycommand% "%squirrel%" -splid "%mlistfol%" -tfile "%prog_dir%mlist.txt" +goto m_process_jobs2 +:m_process_jobs +if "%fatype%" EQU "-fat fat32" echo Fat32 selected, removing nsz and xcz from input list +if "%fatype%" EQU "-fat fat32" ( %pycommand% "%squirrel%" -lib_call listmanager filter_list "%prog_dir%mlist.txt","ext=nsp nsx xci","token=False",Print="False" ) +cls +:m_process_jobs2 +dir "%mlistfol%\*.txt" /b > "%prog_dir%mlist.txt" +rem if "%fatype%" EQU "-fat fat32" goto m_process_jobs_fat32 +for /f "tokens=*" %%f in (mlist.txt) do ( +set "listname=%%f" +if "%vrepack%" EQU "cnsp" call :program_logo +if "%vrepack%" EQU "cnsp" call :m_split_merge_list_name +if "%vrepack%" EQU "cnsp" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t cnsp -o "%w_folder%" -tfile "%mlistfol%\%%f" -roma %romaji% -dmul "calculate" ) + +if "%vrepack%" EQU "xci" call :program_logo +if "%vrepack%" EQU "xci" call :m_split_merge_list_name +if "%vrepack%" EQU "xci" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t xci -o "%w_folder%" -tfile "%mlistfol%\%%f" -roma %romaji% -dmul "calculate" ) + +if "%vrepack%" EQU "nsp" call :program_logo +if "%vrepack%" EQU "nsp" call :m_split_merge_list_name +if "%vrepack%" EQU "nsp" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t nsp -o "%w_folder%" -tfile "%mlistfol%\%%f" -roma %romaji% -dmul "calculate" ) + +if "%vrepack%" EQU "cboth" call :program_logo +if "%vrepack%" EQU "cboth" call :m_split_merge_list_name +if "%vrepack%" EQU "cboth" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t xci -o "%w_folder%" -tfile "%mlistfol%\%%f" -roma %romaji% -dmul "calculate" ) +if "%vrepack%" EQU "cboth" call :program_logo +if "%vrepack%" EQU "cboth" call :m_split_merge_list_name +if "%vrepack%" EQU "cboth" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t cnsp -o "%w_folder%" -tfile "%mlistfol%\%%f" -roma %romaji% -dmul "calculate" ) + +if "%vrepack%" EQU "both" call :program_logo +if "%vrepack%" EQU "both" call :m_split_merge_list_name +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t nsp -o "%w_folder%" -tfile "%mlistfol%\%%f" -roma %romaji% -dmul "calculate" ) +if "%vrepack%" EQU "both" call :program_logo +if "%vrepack%" EQU "both" call :m_split_merge_list_name +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t xci -o "%w_folder%" -tfile "%mlistfol%\%%f" -roma %romaji% -dmul "calculate" ) +%pycommand% "%squirrel%" --strip_lines "%prog_dir%mlist.txt" "1" "true" +if exist "%mlistfol%\%%f" del "%mlistfol%\%%f" +rem call :multi_contador_NF +) + +setlocal enabledelayedexpansion +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +set "gefolder=%fold_output%" +move "%w_folder%\*.xci" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%gefolder%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -tfile "%w_folder%\filename.txt" -ifo "%w_folder%\archfolder" -archive "%gefolder%" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +if exist "%mlistfol%" RD /S /Q "%mlistfol%" >NUL 2>&1 +if exist mlist.txt del mlist.txt +goto m_exit_choice + +:m_process_jobs_fat32 +CD /d "%prog_dir%" +set "finalname=tempname" +cls +call :program_logo +for /f "tokens=*" %%f in (mlist.txt) do ( +set "listname=%%f" +set "list=%mlistfol%\%%f" +call :m_split_merge_list_name +call :m_process_jobs_fat32_2 +%pycommand% "%squirrel%" --strip_lines "%prog_dir%mlist.txt" "1" "true" +if exist "%mlistfol%\%%f" del "%mlistfol%\%%f" +rem call :multi_contador_NF +) +goto m_exit_choice +:m_process_jobs_fat32_2 +if not exist "%w_folder%" MD "%w_folder%" >NUL 2>&1 +copy "%list%" "%w_folder%\list.txt" >NUL 2>&1 +for /f "usebackq tokens=*" %%f in ("%w_folder%\list.txt") do ( +echo %%f +set "name=%%~nf" +set "filename=tempname" +set "orinput=%%f" +if "%%~nxf"=="%%~nf.nsp" call :multi_nsp_manual +if "%%~nxf"=="%%~nf.xci" call :multi_xci_manual +) +if exist "%w_folder%\list.txt" del "%w_folder%\list.txt" +if "%vrepack%" EQU "cnsp" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "cboth" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "cboth" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) +RD /S /Q "%w_folder%\secure" >NUL 2>&1 +RD /S /Q "%w_folder%\normal" >NUL 2>&1 +if exist "%w_folder%\archfolder" goto m_process_jobs_fat32_3 +if exist "%w_folder%\*.xc*" goto m_process_jobs_fat32_4 +if exist "%w_folder%\*.ns*" goto m_process_jobs_fat32_4 +if exist "%w_folder%\tempname.*" goto m_process_jobs_fat32_4 +:m_process_jobs_fat32_3 +setlocal enabledelayedexpansion +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\tempname.nsp" ) +endlocal +dir "%fold_output%\tempname.*" /b > "%w_folder%\templist.txt" +for /f "usebackq tokens=*" %%f in ("%w_folder%\templist.txt") do ( +%pycommand% "%squirrel%" -roma %romaji% --renameftxt "%fold_output%\%%f" -tfile "%list%" +if exist "%w_folder%\templist.txt" del "%w_folder%\templist.txt" +) + +if exist "%w_folder%\*.xc*" goto m_process_jobs_fat32_4 +if exist "%w_folder%\*.ns*" goto m_process_jobs_fat32_4 +RD /S /Q "%w_folder%" >NUL 2>&1 +exit /B + +:m_process_jobs_fat32_4 +dir "%w_folder%\tempname.*" /b > "%w_folder%\templist.txt" +for /f "usebackq tokens=*" %%f in ("%w_folder%\templist.txt") do ( +%pycommand% "%squirrel%" -roma %romaji% --renameftxt "%w_folder%\%%f" -tfile "%list%" +) +setlocal enabledelayedexpansion +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.xci" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%" >NUL 2>&1 +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +exit /B + +:m_split_merge_list_name +echo ******************************************************* +echo 正在处理列表 %listname% +echo ******************************************************* +exit /B + +:m_normal_merge +rem if "%fatype%" EQU "-fat fat32" goto m_KeyChange_skip_fat32 +REM 对于当前的beta版,文件名是计算出来的。此代码将保留评论,以便将来重新集成 +rem echo ******************************************************* +rem echo 输入输出文件的最终文件名 +rem echo ******************************************************* +rem echo. +rem echo 或输入"b",返回选项列表 +rem echo. +rem set /p bs="请键入不带扩展名的名称: " +rem set finalname=%bs:"=% +rem if /i "%finalname%"=="b" goto multi_checkagain + +cls +if "%vrepack%" EQU "cnsp" call :program_logo +if "%vrepack%" EQU "cnsp" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t cnsp -o "%w_folder%" -tfile "%prog_dir%mlist.txt" -roma %romaji% -dmul "calculate" ) + +if "%vrepack%" EQU "xci" call :program_logo +if "%vrepack%" EQU "xci" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t xci -o "%w_folder%" -tfile "%prog_dir%mlist.txt" -roma %romaji% -dmul "calculate" ) + +if "%vrepack%" EQU "nsp" call :program_logo +if "%vrepack%" EQU "nsp" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t nsp -o "%w_folder%" -tfile "%prog_dir%mlist.txt" -roma %romaji% -dmul "calculate" ) + +if "%vrepack%" EQU "cboth" call :program_logo +if "%vrepack%" EQU "cboth" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t xci -o "%w_folder%" -tfile "%prog_dir%mlist.txt" -roma %romaji% -dmul "calculate" ) +if "%vrepack%" EQU "cboth" call :program_logo +if "%vrepack%" EQU "cboth" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t cnsp -o "%w_folder%" -tfile "%prog_dir%mlist.txt" -roma %romaji% -dmul "calculate" ) + +if "%vrepack%" EQU "both" call :program_logo +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t nsp -o "%w_folder%" -tfile "%prog_dir%mlist.txt" -roma %romaji% -dmul "calculate" ) +if "%vrepack%" EQU "both" call :program_logo +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% %fatype% %fexport% %skdelta% -t xci -o "%w_folder%" -tfile "%prog_dir%mlist.txt" -roma %romaji% -dmul "calculate" ) + +setlocal enabledelayedexpansion +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +set "gefolder=%fold_output%\!end_folder!" +if "%oforg%" EQU "inline" ( set "gefolder=%fold_output%" ) +MD "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xci" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%gefolder%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -tfile "%w_folder%\filename.txt" -ifo "%w_folder%\archfolder" -archive "%gefolder%" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +goto m_exit_choice + +:m_KeyChange_skip_fat32 +CD /d "%prog_dir%" +echo ******************************************************* +echo 输入输出文件的最终文件名 +echo ******************************************************* +echo. +echo 或输入"b",返回选项列表 +echo. +set /p bs="请键入不带扩展名的名称: " +set finalname=%bs:"=% +if /i "%finalname%"=="b" goto multi_checkagain + +cls +call :program_logo +for /f "tokens=*" %%f in (mlist.txt) do ( +set "name=%%~nf" +set "filename=%%~nxf" +set "orinput=%%f" +if "%%~nxf"=="%%~nf.nsp" call :multi_nsp_manual +if "%%~nxf"=="%%~nf.xci" call :multi_xci_manual +%pycommand% "%squirrel%" --strip_lines "%prog_dir%mlist.txt" "1" "true" +rem call :multi_contador_NF +) +set "filename=%finalname%" +set "end_folder=%finalname%" +set "filename=%finalname%[multi]" +::pause +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) + +setlocal enabledelayedexpansion +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +set "gefolder=%fold_output%\!end_folder!" +if "%oforg%" EQU "inline" ( set "gefolder=%fold_output%" ) +MD "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xci" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%gefolder%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%gefolder%\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +goto m_exit_choice + +:m_exit_choice +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +if exist mlist.txt del mlist.txt +if /i "%va_exit%"=="true" echo 程序将立即关闭 +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择菜单 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto m_exit_choice + + +:multi_nsp_manual +set "showname=%orinput%" +call :processing_message +call :squirrell +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%orinput%" +echo 完成 +call :thumbup +call :delay +exit /B + +:multi_xci_manual +::XCI文件 +set "showname=%orinput%" +call :processing_message +MD "%w_folder%" >NUL 2>&1 +MD "%w_folder%\secure" >NUL 2>&1 +MD "%w_folder%\normal" >NUL 2>&1 +MD "%w_folder%\update" >NUL 2>&1 +call :getname +echo ------------------------------------ +echo 从XCI提取安全分区 +echo ------------------------------------ +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%orinput%" +echo DONE +call :thumbup +call :delay +exit /B + +:multi_contador_NF +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (mlist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍有 !conta! 个要处理的文件 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + +REM the logo function has been disabled temporarly for the current beta, the code remains here +REM unaccessed for future modification and reintegration +:multi_set_clogo +cls +call :program_logo +echo ------------------------------------------ +echo 自定义图标 +echo ------------------------------------------ +echo 适用于多游戏XCI。 +echo 当前设置了自定义图标和名称,拖动一个NSP或control nca +echo 这种方式下,程序将在正常分区中复制control nca +echo 如果您不添加自定义图标,则将从您的一款游戏中设置图标 +echo .......................................... +echo 输入"b",返回列表生成器 +echo .......................................... +set /p bs="将NSP或NCA文件拖到窗口上,然后按回车键: " +set bs=%bs:"=% +if /i "%bs%"=="b" ( goto multi_checkagain ) +if exist "%bs%" ( goto multi_checklogo ) +goto multi_set_clogo + +:multi_checklogo +if exist "%~dp0logo.txt" del "%~dp0logo.txt" >NUL 2>&1 +echo %bs%>"%~dp0hlogo.txt" +FINDSTR /L ".nsp" "%~dp0hlogo.txt" >"%~dp0logo.txt" +FINDSTR /L ".nca" "%~dp0hlogo.txt" >>"%~dp0logo.txt" +set /p custlogo=<"%~dp0logo.txt" +del "%~dp0hlogo.txt" +::echo %custlogo% +for /f "usebackq tokens=*" %%f in ( "%~dp0logo.txt" ) do ( +set "logoname=%%~nxf" +if "%%~nxf"=="%%~nf.nsp" goto ext_log +if "%%~nxf"=="%%~nf.nca" goto check_log +) + +:ext_log +del "%~dp0logo.txt" +if not exist "%w_folder%" MD "%w_folder%" >NUL 2>&1 +if exist "%w_folder%\normal" RD /S /Q "%w_folder%\normal" >NUL 2>&1 + +%pycommand% "%squirrel%" --nsptype "%custlogo%">"%w_folder%\nsptype.txt" +set /p nsptype=<"%w_folder%\nsptype.txt" +del "%w_folder%\nsptype.txt" +if "%nsptype%" EQU "DLC" echo. +if "%nsptype%" EQU "DLC" echo ---NSP DOESN'T HAVE A CONTROL NCA--- +if "%nsptype%" EQU "DLC" echo. +if "%nsptype%" EQU "DLC" ( goto multi_set_clogo ) +MD "%w_folder%\normal" >NUL 2>&1 +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\normal" --NSP_copy_nca_control "%custlogo%" +echo ................ +echo "提取LOGO" +echo ................ +echo. +goto multi_checkagain + +:check_log +del "%~dp0logo.txt" +if not exist "%w_folder%" MD "%w_folder%" >NUL 2>&1 +if exist "%w_folder%\normal" RD /S /Q "%w_folder%\normal" >NUL 2>&1 +%pycommand% "%squirrel%" --ncatype "%custlogo%">"%w_folder%\ncatype.txt" +set /p ncatype=<"%w_folder%\ncatype.txt" +del "%w_folder%\ncatype.txt" +if "%ncatype%" NEQ "Content.CONTROL" echo. +if "%ncatype%" NEQ "Content.CONTROL" echo ---NCA IS NOT A CONTROL TYPE--- +if "%ncatype%" NEQ "Content.CONTROL" echo. +if "%ncatype%" NEQ "Content.CONTROL" ( goto multi_set_clogo ) +MD "%w_folder%\normal" >NUL 2>&1 +copy "%custlogo%" "%w_folder%\normal\%logoname%" +echo. +goto multi_checkagain +exit + + +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// +::拆分模式 +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// + +:SPLMODE +cls +call :program_logo +if exist %w_folder% RD /S /Q "%w_folder%" >NUL 2>&1 +echo ----------------------------------------------- +echo 拆分模式已激活 +echo ----------------------------------------------- +if exist "splist.txt" goto sp_prevlist +goto sp_manual_INIT +:sp_prevlist +set conta=0 +for /f "tokens=*" %%f in (splist.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (splist.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del splist.txt ) +endlocal +if not exist "splist.txt" goto sp_manual_INIT +ECHO ....................................................... +ECHO 发现了以前的列表, 你想做什么? +:sp_prevlist0 +ECHO ....................................................... +echo 输入"1",从上一列表自动开始处理 +echo 输入"2",删除列表并创建新列表. +echo 输入"3",继续构建上一个列表 +echo ....................................................... +echo 注意:通过输入3,您将在开始处理文件之前看到前一个列表, +echo 并且可以从列表中添加和删除项目 +echo. +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="3" goto sp_showlist +if /i "%bs%"=="2" goto sp_delist +if /i "%bs%"=="1" goto sp_start_cleaning +if /i "%bs%"=="0" goto manual_Reentry +echo. +echo 错误的选择 +goto sp_prevlist0 +:sp_delist +del splist.txt +cls +call :program_logo +echo ----------------------------------------------- +echo 拆分模式已激活 +echo ----------------------------------------------- +echo .................................. +echo 你已经开始一个新的列表 +echo .................................. +:sp_manual_INIT +endlocal +ECHO *********************************************** +echo 输入"1",将文件夹添加到列表中 +echo 输入"2",将文件添加到列表中 +echo 输入"3",通过本地文件库,将文件添加到列表 +echo 输入"4",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"0",返回模式选择菜单 +ECHO *********************************************** +echo. +%pycommand% "%squirrel%" -t nsp xci nsz xcz -tfile "%prog_dir%splist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal + +if /i "%eval%"=="0" goto manual_Reentry +if /i "%eval%"=="1" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%splist.txt" mode=folder ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%splist.txt" mode=file ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%splist.txt" "extlist=nsp xci nsz xcz" ) +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%splist.txt" "extlist=nsp xci nsz xcz" ) + +echo. +:sp_checkagain +echo 你想做什么? +echo ...................................................................... +echo "拖动另一个文件或文件夹,然后按回车键将项目添加到列表中" +echo. +echo 输入"1",开始处理 +echo 输入"2",将另一个文件夹添加到列表 +echo 输入"3",将另一个文件添加到列表 +echo 输入"4",通过本地文件库,将文件添加到列表 +echo 输入"5",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"e",退出 +echo 输入"i",查看要处理的文件列表 +echo 输入"r",删除一些文件(从底部开始计数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" -t nsp xci nsz xcz -tfile "%prog_dir%splist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal + +if /i "%eval%"=="0" goto manual_Reentry +if /i "%eval%"=="1" goto sp_start_cleaning +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%splist.txt" mode=folder ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%splist.txt" mode=file ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%splist.txt" "extlist=nsp xci nsz xcz" ) +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%splist.txt" "extlist=nsp xci nsz xcz" ) + +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto sp_showlist +if /i "%eval%"=="r" goto sp_r_files +if /i "%eval%"=="z" del splist.txt + +goto sp_checkagain + +:sp_r_files +set /p bs="输入要删除的文件数(从底部开始): " +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (splist.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:sp_update_list1 +if !pos1! GTR !pos2! ( goto :sp_update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :sp_update_list1 +:sp_update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>splist.txt.new +endlocal +move /y "splist.txt.new" "splist.txt" >nul +endlocal + +:sp_showlist +cls +call :program_logo +echo ------------------------------------------------- +echo 拆分模式已激活 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (splist.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (splist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 您已添加了 !conta! 个要处理的文件 +echo ................................................. +endlocal + +goto sp_checkagain + +:sp_cl_wrongchoice +echo 错误的选择 +echo ............ +:sp_start_cleaning +echo ******************************************************* +echo 接下来选择您要执行的操作 +echo ******************************************************* +echo 输入"1",重新打包为NSP +echo 输入"2",重新打包为XCI +echo 输入"3",重新打包为NSP和XCI +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="b" goto sp_checkagain +if /i "%bs%"=="1" set "vrepack=nsp" +if /i "%bs%"=="2" set "vrepack=xci" +if /i "%bs%"=="3" set "vrepack=both" +if %vrepack%=="none" goto sp_cl_wrongchoice +if "%fatype%" EQU "-fat fat32" echo Fat32 selected, removing nsz and xcz from input list +if "%fatype%" EQU "-fat fat32" ( %pycommand% "%squirrel%" -lib_call listmanager filter_list "%prog_dir%splist.txt","ext=nsp nsx xci","token=False",Print="False" ) +cls +call :program_logo +for /f "tokens=*" %%f in (splist.txt) do ( +set "name=%%~nf" +set "filename=%%~nxf" +set "end_folder=%%~nf" +set "orinput=%%f" +if "%%~nxf"=="%%~nf.nsp" call :split_content +if "%%~nxf"=="%%~nf.NSP" call :split_content +if "%%~nxf"=="%%~nf.nsz" call :split_content +if "%%~nxf"=="%%~nf.NSZ" call :split_content +if "%%~nxf"=="%%~nf.xci" call :split_content +if "%%~nxf"=="%%~nf.XCI" call :split_content +if "%%~nxf"=="%%~nf.xcz" call :split_content +if "%%~nxf"=="%%~nf.XCZ" call :split_content +%pycommand% "%squirrel%" --strip_lines "%prog_dir%splist.txt" "1" "true" +setlocal enabledelayedexpansion +if exist "%fold_output%\!end_folder!" RD /S /Q "%fold_output%\!end_folder!" >NUL 2>&1 +MD "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.xci" "%fold_output%\!end_folder!\" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%\!end_folder!\" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%\!end_folder!\" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%\!end_folder!\" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\!end_folder!\%filename%.nsp" ) +if exist "%w_folder%" RD /S /Q "%w_folder%" >NUL 2>&1 +endlocal +rem call :sp_contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +:SPLIT_exit_choice +if exist splist.txt del splist.txt +if /i "%va_exit%"=="true" echo 程序将立即关闭 +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择菜单 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto SPLIT_exit_choice + +:split_content +rem if "%fatype%" EQU "-fat fat32" goto split_content_fat32 +set "showname=%orinput%" +set "sp_repack=%vrepack%" +if exist "%w_folder%" RD /S /Q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" >NUL 2>&1 +call :processing_message +call :squirrell +if "%vrepack%" EQU "nsp" ( %pycommand% "%squirrel%" %buffer% -o "%w_folder%" %fatype% %fexport% -t "nsp" -dspl "%orinput%" -tfile "%prog_dir%splist.txt") +if "%vrepack%" EQU "xci" ( %pycommand% "%squirrel%" %buffer% -o "%w_folder%" %fatype% %fexport% -t "xci" -dspl "%orinput%" -tfile "%prog_dir%splist.txt") +if "%vrepack%" EQU "both" ( %pycommand% "%squirrel%" %buffer% -o "%w_folder%" %fatype% %fexport% -t "both" -dspl "%orinput%" -tfile "%prog_dir%splist.txt") + +call :thumbup +call :delay +exit /B + +:split_content_fat32 +CD /d "%prog_dir%" +set "showname=%orinput%" +set "sp_repack=%vrepack%" +if exist "%w_folder%" RD /S /Q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" >NUL 2>&1 +call :processing_message +call :squirrell +%pycommand% "%squirrel%" %buffer% -o "%w_folder%" --splitter "%orinput%" -pe "secure" +for /f "usebackq tokens=*" %%f in ("%w_folder%\dirlist.txt") do ( +setlocal enabledelayedexpansion +rem echo "!sp_repack!" +set "tfolder=%%f" +set "fname=%%~nf" +set "test=%%~nf" +set test=!test:[DLC]=! +rem echo !test! +rem echo "!test!" +rem echo "!fname!" +if "!test!" NEQ "!fname!" ( set "sp_repack=nsp" ) +rem echo "!sp_repack!" +set "test=%%~nf" +set test=!test:[UPD]=! +rem echo !test! +rem echo "!test!" +rem echo "!fname!" +if "!test!" NEQ "!fname!" ( set "sp_repack=nsp" ) +rem echo "!sp_repack!" +if "!sp_repack!" EQU "nsp" ( call "%nsp_lib%" "sp_convert" "%w_folder%" "!tfolder!" "!fname!" ) +if "!sp_repack!" EQU "xci" ( call "%xci_lib%" "sp_repack" "%w_folder%" "!tfolder!" "!fname!" ) +if "!sp_repack!" EQU "both" ( call "%nsp_lib%" "sp_convert" "%w_folder%" "!tfolder!" "!fname!" ) +if "!sp_repack!" EQU "both" ( call "%xci_lib%" "sp_repack" "%w_folder%" "!tfolder!" "!fname!" ) +endlocal +%pycommand% "%squirrel%" --strip_lines "%prog_dir%dirlist.txt" "1" "true" +) +del "%w_folder%\dirlist.txt" >NUL 2>&1 + +call :thumbup +call :delay +exit /B + +:sp_contador_NF +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (splist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍有 !conta! 个要处理的文件 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// +:: 数据库模式 +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// +:DBMODE +cls +call :program_logo +echo ----------------------------------------------- +echo 数据库生成模式已激活 +echo ----------------------------------------------- +if exist "DBL.txt" goto DBprevlist +goto DBmanual_INIT +:DBprevlist +set conta=0 +for /f "tokens=*" %%f in (DBL.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (DBL.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del DBL.txt ) +endlocal +if not exist "DBL.txt" goto DBmanual_INIT +ECHO ....................................................... +ECHO 发现了以前的列表, 你想做什么? +:DBprevlist0 +ECHO ....................................................... +echo 输入"1",从上一列表自动开始处理 +echo 输入"2",删除列表并创建新列表. +echo 输入"3",继续构建上一个列表 +echo ....................................................... +echo 注意:通过输入3,您将在开始处理文件之前看到前一个列表, +echo 并且可以从列表中添加和删除项目 +echo. +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="3" goto DBshowlist +if /i "%bs%"=="2" goto DBdelist +if /i "%bs%"=="1" goto DBstart_cleaning +if /i "%bs%"=="0" goto manual_Reentry +echo. +echo 错误的选择 +goto DBprevlist0 +:DBdelist +del DBL.txt +cls +call :program_logo +echo ----------------------------------------------- +echo 单文件处理已激活 +echo ----------------------------------------------- +echo .................................. +echo 你已经开始一个新的列表 +echo .................................. +:DBmanual_INIT +endlocal +ECHO *********************************************** +echo 输入"0"返回模式选择菜单 +ECHO *********************************************** +echo. +set /p bs="请将文件或文件夹拖到窗口上,然后按回车键: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +set "targt=%bs%" +dir "%bs%\" >nul 2>nul +if not errorlevel 1 goto DBcheckfolder +if exist "%bs%\" goto DBcheckfolder +goto DBcheckfile +:DBcheckfolder +%pycommand% "%squirrel%" -t nsp xci nsx nsz xcz -tfile "%prog_dir%DBL.txt" -ff "%targt%" +goto DBcheckagain +:DBcheckfile +%pycommand% "%squirrel%" -t nsp xci nsx nsz xcz -tfile "%prog_dir%DBL.txt" -ff "%targt%" +goto DBcheckagain +echo. +:DBcheckagain +echo 你想做什么? +echo ...................................................................... +echo "拖动另一个文件或文件夹,然后按回车键将项目添加到列表中" +echo. +echo 输入"1",开始处理 +echo 输入"e",退出 +echo 输入"i",查看要处理的文件列表 +echo 输入"r",删除一些文件(从底部开始计数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="拖放文件/文件夹或设置选项: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto DBstart_cleaning +if /i "%bs%"=="e" goto DBsalida +if /i "%bs%"=="i" goto DBshowlist +if /i "%bs%"=="r" goto DBr_files +if /i "%bs%"=="z" del DBL.txt +set "targt=%bs%" +dir "%bs%\" >nul 2>nul +if not errorlevel 1 goto DBcheckfolder +if exist "%bs%\" goto DBcheckfolder +goto DBcheckfile +goto DBsalida + +:DBr_files +set /p bs="输入要删除的文件数(从底部开始): " +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (DBL.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:DBupdate_list1 +if !pos1! GTR !pos2! ( goto :DBupdate_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :DBupdate_list1 +:DBupdate_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>DBL.txt.new +endlocal +move /y "DBL.txt.new" "DBL.txt" >nul +endlocal + +:DBshowlist +cls +call :program_logo +echo ------------------------------------------------- +echo 单文件处理已激活 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (DBL.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (DBL.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 您已添加了 !conta! 个要处理的文件 +echo ................................................. +endlocal + +goto DBcheckagain + +:DBs_cl_wrongchoice +echo 错误的选择 +echo ............ +:DBstart_cleaning +echo ******************************************************* +echo 接下来选择您要执行的操作 +echo ******************************************************* +echo 输入"1",NUTDB数据库生成 +echo 输入"2",扩展数据库生成 +echo 输入"3",生成无钥数据库(扩展) +echo 输入"4",生成简单数据库 +echo 输入"5",生成以上4个数据库 +echo 输入"Z",生成ZIP文件 +echo. +ECHO ****************************************** +echo 或输入"0",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="0" goto DBcheckagain +if /i "%bs%"=="Z" set "vrepack=zip" +if /i "%bs%"=="Z" goto DBs_start +if /i "%bs%"=="1" set "dbformat=nutdb" +if /i "%bs%"=="1" goto DBs_GENDB +if /i "%bs%"=="2" set "dbformat=extended" +if /i "%bs%"=="2" goto DBs_GENDB +if /i "%bs%"=="3" set "dbformat=keyless" +if /i "%bs%"=="3" goto DBs_GENDB +if /i "%bs%"=="4" set "dbformat=simple" +if /i "%bs%"=="4" goto DBs_GENDB +if /i "%bs%"=="5" set "dbformat=all" +if /i "%bs%"=="5" goto DBs_GENDB +if %vrepack%=="none" goto DBs_cl_wrongchoice + +:DBs_start +cls +call :program_logo +for /f "tokens=*" %%f in (DBL.txt) do ( +set "name=%%~nf" +set "filename=%%~nxf" +set "orinput=%%f" +set "ziptarget=%%f" +if "%vrepack%" EQU "zip" ( set "zip_restore=true" ) +if "%%~nxf"=="%%~nf.nsp" call :DBnsp_manual +if "%%~nxf"=="%%~nf.nsx" call :DBnsp_manual +if "%%~nxf"=="%%~nf.nsz" call :DBnsp_manual +if "%%~nxf"=="%%~nf.NSP" call :DBnsp_manual +if "%%~nxf"=="%%~nf.NSX" call :DBnsp_manual +if "%%~nxf"=="%%~nf.NSZ" call :DBnsp_manual +if "%%~nxf"=="%%~nf.xci" call :DBnsp_manual +if "%%~nxf"=="%%~nf.XCI" call :DBnsp_manual +if "%%~nxf"=="%%~nf.xcz" call :DBnsp_manual +if "%%~nxf"=="%%~nf.XCZ" call :DBnsp_manual +%pycommand% "%squirrel%" --strip_lines "%prog_dir%DBL.txt" "1" "true" +rem call :DBcontador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +:DBs_exit_choice +if exist DBL.txt del DBL.txt +if /i "%va_exit%"=="true" echo 程序将立即关闭 +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择菜单 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto s_exit_choice + +:DBnsp_manual +set "filename=%name%" +set "showname=%orinput%" +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" +call :squirrell + +if "%vrepack%" EQU "zip" ( goto nsp_just_zip ) + +:DBnsp_just_zip +if "%zip_restore%" EQU "true" ( call :makezip ) +rem call :getname +if "%vrename%" EQU "true" call :addtags_from_nsp +if "%zip_restore%" EQU "true" ( goto :nsp_just_zip2 ) + +:DBnsp_just_zip2 + +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +RD /S /Q "%w_folder%" >NUL 2>&1 + +echo DONE +call :thumbup +call :delay + +:DBend_nsp_manual +exit /B + +:DBs_GENDB +set "db_file=%prog_dir%INFO\%dbformat%_DB.txt" +set "dbdir=%prog_dir%INFO\" +if exist "%dbdir%temp" ( RD /S /Q "%dbdir%temp" ) >NUL 2>&1 +rem echo %dbdir%temp + +for /f "tokens=*" %%f in (DBL.txt) do ( +set "orinput=%%f" +if exist "%dbdir%temp" ( RD /S /Q "%dbdir%temp" ) >NUL 2>&1 +call :DBGeneration +if "%workers%" EQU "-threads 1" ( %pycommand% "%squirrel%" --strip_lines "%prog_dir%DBL.txt" "1" "true") +if "%workers%" NEQ "-threads 1" ( call :DBcheck ) +rem if "%workers%" NEQ "-threads 1" ( call :DBcontador_NF ) +) +:DBs_fin +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +if exist "%dbdir%temp" ( RD /S /Q "%dbdir%temp" ) >NUL 2>&1 +goto DBs_exit_choice + +:DBGeneration +if not exist "%dbdir%" MD "%dbdir%">NUL 2>&1 +%pycommand% "%squirrel%" --dbformat "%dbformat%" -dbfile "%db_file%" -tfile "%prog_dir%DBL.txt" -nscdb "%orinput%" %workers% +exit /B + +:DBcheck +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (DBL.txt) do ( +set /a conta=!conta! + 1 +) +if !conta! LEQ 0 ( del DBL.txt ) +endlocal +if not exist "DBL.txt" goto DBs_fin +exit /B + +:DBcontador_NF +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (DBL.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍有 !conta! 个要处理的文件 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + + +:://///////////////////////////////////////////////// +::NSCB文件信息模式 +:://///////////////////////////////////////////////// +:INFMODE +call "%infobat%" "%prog_dir%" +cls +goto TOP_INIT + +:://///////////////////////////////////////////////// +::NSCB_options.cmd配置脚本 +:://///////////////////////////////////////////////// +:OPT_CONFIG +call "%batconfig%" "%op_file%" "%listmanager%" "%batdepend%" +cls +goto TOP_INIT + + +:://///////////////////////////////////////////////// +::子程序 +:://///////////////////////////////////////////////// + +:squirrell +echo ,;:;;, +echo ;;;;; +echo .=', ;:;;:, +echo /_', "=. ';:;:; +echo @=:__, \,;:;:' +echo _(\.= ;:;;' +echo `"_( _/="` +echo `"' +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " BASED ON THE WORK OF BLAWAR AND LUCA FRAGA " +ECHO VERSION 1.00c (NEW) +ECHO ------------------------------------------------------------------------------------- +ECHO Program's github: https://github.com/julesontheroad/NSC_BUILDER +ECHO Blawar's github: https://github.com/blawar +ECHO Luca Fraga's github: https://github.com/LucaFraga +ECHO ------------------------------------------------------------------------------------- +exit /B + +:delay +PING -n 2 127.0.0.1 >NUL 2>&1 +exit /B + +:thumbup +echo. +echo /@ +echo \ \ +echo ___\ \ +echo (__O) \ +echo (____@) \ +echo (____@) \ +echo (__o)_ \ +echo \ \ +echo. +echo 希望你玩的开心 +exit /B + +:getname + +if not exist %w_folder% MD %w_folder% >NUL 2>&1 + +set filename=%filename:[nap]=% +set filename=%filename:[xc]=% +set filename=%filename:[nc]=% +set filename=%filename:[rr]=% +set filename=%filename:[xcib]=% +set filename=%filename:[nxt]=% +set filename=%filename:[Trimmed]=% +echo %filename% >"%w_folder%\fname.txt" + +::deletebrackets +for /f "usebackq tokens=1* delims=[" %%a in ("%w_folder%\fname.txt") do ( + set end_folder=%%a) +echo %end_folder%>"%w_folder%\fname.txt" +::deleteparenthesis +for /f "usebackq tokens=1* delims=(" %%a in ("%w_folder%\fname.txt") do ( + set end_folder=%%a) +echo %end_folder%>"%w_folder%\fname.txt" +::I also wanted to remove_( +set end_folder=%end_folder:_= % +set end_folder=%end_folder:~0,-1% +del "%w_folder%\fname.txt" >NUL 2>&1 +if "%vrename%" EQU "true" ( set "filename=%end_folder%" ) +exit /B + +:makezip +echo. +echo 正在为 %ziptarget% 创建zip压缩文件 +echo. +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\zip" --zip_combo "%ziptarget%" +%pycommand% "%squirrel%" -o "%w_folder%\zip" --NSP_c_KeyBlock "%ziptarget%" +%pycommand% "%squirrel%" --nsptitleid "%ziptarget%" >"%w_folder%\nsptitleid.txt" +if exist "%w_folder%\secure\*.dat" ( move "%w_folder%\secure\*.dat" "%w_folder%\zip" ) >NUL 2>&1 + +set /p titleid=<"%w_folder%\nsptitleid.txt" +del "%w_folder%\nsptitleid.txt" >NUL 2>&1 +%pycommand% "%squirrel%" --nsptype "%ziptarget%" >"%w_folder%\nsptype.txt" +set /p type=<"%w_folder%\nsptype.txt" +del "%w_folder%\nsptype.txt" >NUL 2>&1 +%pycommand% "%squirrel%" --ReadversionID "%ziptarget%">"%w_folder%\nspversion.txt" +set /p verID=<"%w_folder%\nspversion.txt" +set "verID=V%verID%" +del "%w_folder%\nspversion.txt" >NUL 2>&1 +if "%type%" EQU "BASE" ( set "ctag=" ) +if "%type%" EQU "UPDATE" ( set ctag=[UPD] ) +if "%type%" EQU "DLC" ( set ctag=[DLC] ) +%pycommand% "%squirrel%" -i "%ziptarget%">"%w_folder%\zip\fileinfo[%titleid%][%verID%]%ctag%.txt" +%pycommand% "%squirrel%" --filelist "%ziptarget%">"%w_folder%\zip\ORIGINAL_filelist[%titleid%][%verID%]%ctag%.txt" +"%zip%" -ifo "%w_folder%\zip" -zippy "%w_folder%\%titleid%[%verID%]%ctag%.zip" +RD /S /Q "%w_folder%\zip" >NUL 2>&1 +exit /B + +:processing_message +echo 正在处理 %showname% +echo. +exit /B + +:check_titlerights +%pycommand% "%squirrel%" --nsp_htrights "%target%">"%w_folder%\trights.txt" +set /p trights=<"%w_folder%\trights.txt" +del "%w_folder%\trights.txt" >NUL 2>&1 +if "%trights%" EQU "TRUE" ( goto ct_true ) +if "%vrepack%" EQU "nsp" ( set "vpack=none" ) +if "%vrepack%" EQU "both" ( set "vpack=xci" ) +:ct_true +exit /B + + +:addtags_from_nsp +%pycommand% "%squirrel%" --nsptitleid "%orinput%" >"%w_folder%\nsptitleid.txt" +set /p titleid=<"%w_folder%\nsptitleid.txt" +del "%w_folder%\nsptitleid.txt" >NUL 2>&1 +%pycommand% "%squirrel%" --nsptype "%orinput%" >"%w_folder%\nsptype.txt" +set /p type=<"%w_folder%\nsptype.txt" +del "%w_folder%\nsptype.txt" >NUL 2>&1 +if "%type%" EQU "BASE" ( set filename=%filename%[%titleid%][v0] ) +if "%type%" EQU "UPDATE" ( set filename=%filename%[%titleid%][UPD] ) +if "%type%" EQU "DLC" ( set filename=%filename%[%titleid%][DLC] ) + +exit /B +:addtags_from_xci +dir "%w_folder%\secure\*.cnmt.nca" /b >"%w_folder%\ncameta.txt" +set /p ncameta=<"%w_folder%\ncameta.txt" +del "%w_folder%\ncameta.txt" >NUL 2>&1 +set "ncameta=%w_folder%\secure\%ncameta%" +%pycommand% "%squirrel%" --ncatitleid "%ncameta%" >"%w_folder%\ncaid.txt" +set /p titleid=<"%w_folder%\ncaid.txt" +del "%w_folder%\ncaid.txt" +echo [%titleid%]>"%w_folder%\titleid.txt" + +FINDSTR /L 000] "%w_folder%\titleid.txt">"%w_folder%\isbase.txt" +set /p c_base=<"%w_folder%\isbase.txt" +del "%w_folder%\isbase.txt" +FINDSTR /L 800] "%w_folder%\titleid.txt">"%w_folder%\isupdate.txt" +set /p c_update=<"%w_folder%\isupdate.txt" +del "%w_folder%\isupdate.txt" + +set ttag=[DLC] + +if [%titleid%] EQU %c_base% set ttag=[v0] +if [%titleid%] EQU %c_update% set ttag=[UPD] + +set filename=%filename%[%titleid%][%ttag%] +del "%w_folder%\titleid.txt" +exit /B + +:missing_things +call :program_logo +echo .................................... +echo 您缺少以下内容 : +echo .................................... +echo. +if not exist "%op_file%" echo - The config file is not correctly pointed or is missing. +if not exist "%squirrel%" echo - "squirrel.py" is not correctly pointed or is missing. +if not exist "%xci_lib%" echo - "XCI.bat" is not correctly pointed or is missing. +if not exist "%nsp_lib%" echo - "NSP.bat" is not correctly pointed or is missing. +if not exist "%zip%" echo - "7za.exe" is not correctly pointed or is missing. + +if not exist "%hacbuild%" echo - "hacbuild.exe" is not correctly pointed or is missing. +if not exist "%listmanager%" echo - "listmanager.py" is not correctly pointed or is missing. +if not exist "%batconfig%" echo - "NSCB_config.bat" is not correctly pointed or is missing. +if not exist "%infobat%" echo - "info.bat" is not correctly pointed or is missing. +::文件完整路径 +if not exist "%dec_keys%" echo - "keys.txt"文件指向不正确或者缺失。 +echo. +pause +echo 程序即将退出 +PING -n 2 127.0.0.1 >NUL 2>&1 +goto salida +:salida +::暂停 +exit diff --git a/py/Regional/ZH/README_ZH.md b/py/Regional/ZH/README_ZH.md new file mode 100644 index 00000000..e27f6d73 --- /dev/null +++ b/py/Regional/ZH/README_ZH.md @@ -0,0 +1,411 @@ +# Nintendo Switch Cleaner and Builder (NSC_Builder) +![DeviceTag](https://img.shields.io/badge/Device-SWITCH-e60012.svg) ![LanguageTag](https://img.shields.io/badge/languages-python_batch_html5_javascript-blue.svg) + +## 1.璇存槑 + +Nintendo Switch娓呮磥鍜岀敓鎴愬櫒銆傚熀浜巋acbuild鍜孨ut鐨刾ython搴撶殑鎵瑰鐞嗘枃浠讹紝python鍜宧tml鑴氭湰銆傛渶鍒濊璁$敤浜庝粠nsp鏂囦欢涓垹闄ゆ爣棰樻潈鍔犲瘑骞跺埗浣滃鍐呭鐨刵sp / xci鏂囦欢锛屽浠婏紝瀹冩槸涓绉嶄笓闂ㄧ敤浜庢壒澶勭悊鍜屾枃浠朵俊鎭殑澶氬唴瀹瑰伐鍏凤紝鏈変汉绉板叾涓篠witch's Knife锛屼粬涔熻鏄纭殑銆 + +NSC_Builder鏃㈠熀浜嶣lawar's nut.py鐨勪綔鍝侊紝鍙堝熀浜嶭uca Fraga鐨刪acbuild锛屽苟涓旂敱鈥滄澗榧犫濇彁渚涘姩鍔涳紝璇ユ澗榧犲師鏈槸鍧氭灉鍙夛紝鍏锋湁闄勫姞鍔熻兘锛屽浠婏紝瀹冨彲浠ヨ璁や负鏄嚜宸辩殑鐙珛绋嬪簭銆 +浠巚0.8鐗堟湰寮濮嬶紝璇ョ▼搴忎笉鍐嶄緷璧杊acbuild鐢熸垚xci锛屽苟涓斿紑鍙戜簡鏂颁唬鐮佷互鏇村ソ鍦颁笌squirrel闆嗘垚銆 + +## 2.鈥滃垹闄ゆ墍鏈夋潈鈥濈殑鍚箟鏄粈涔堛 +褰撴偍浠巒sp鏂囦欢涓垹闄ゆ爣棰樻潈鍒╁姞瀵嗘椂锛屾偍鏃犻渶闂ㄧエ鍗冲彲瀹夎娓告垙锛屽墠鎻愭槸鎮ㄤ笉鍚戜换澶╁爞鍙戦侀仴娴嬫暟鎹紝鍥犳鎺у埗鍙颁笂鐨勫彲璺熻釜瓒宠抗杈冨皬銆 +瀹冭繕鏈夊姪浜庝粠nsp鍒皒ci鏂囦欢鐨勮浆鎹紝浠庤屾棤闇鍦ㄥ閮ㄥ畨瑁呯エ璇併 + +## 3.鎴戝彲浠ヤ娇鐢ㄨ绋嬪簭鍋氫粈涔堬紵 + +璇ョ▼搴忕殑褰撳墠鐗堟湰鍏佽鎮細 + +1.-鍒朵綔澶氬唴瀹圭殑xci鎴杗sp鏂囦欢銆 + +2.-浠巒sp鏂囦欢涓滄摝闄ゆ爣棰樻潈闄愨濆姞瀵嗐 + +3.-鏃犻渶鈥滄洿鏂板垎鍖衡濆嵆鍙瀯寤簒ci鏂囦欢**锛岃繖鎰忓懗鐫瀹冧滑鍗犵敤鐨勫瓨鍌ㄧ┖闂存洿灏戙 + +4.-浠庢洿鏂颁腑鍒犻櫎**澧為噺** + +5.- **灏嗗鍐呭**鎷嗗垎鍥瀤ci鎴杗sp鏂囦欢 + +6.-鏇存敼xci鍜宯sp涔嬮棿鍐呭鐨勫寘瑁 + +7.- **闄嶄綆鎵闇鐨勭郴缁熺増鏈**鍒版父鎴忕殑瀹為檯鍔犲瘑銆 + +8.-闄嶄綆瑙e瘑娓告垙鎵闇鐨勪竾鑳介挜鍖欍 + +9.- **浠巟ci鍜宯sp绛惧嚭淇℃伅**锛屽寘鎷兘澶熸墽琛屽畠鐨勫浐浠讹紝娓告垙淇℃伅锛宯ca鍐呭鐨勫ぇ灏忊 + +10.- **浠巒acp鍜宑nmt鏂囦欢涓鏌ユ暟鎹**鑰屾棤闇浠巒sp \ xci涓彁鍙栧畠浠 + +10.-閲嶆柊鍖呰xci鍜宯sp鍐呭锛屾牸寮忎笌** fat32 **鍏煎 + +11.-``澶ч噺鏋勫缓''xci鏂囦欢鍜宯sp鏂囦欢浠ュ崟鍐呭鍜屽鍐呭鏍煎紡 + +12.-``閲嶅懡鍚''nsp锛寈ci鏂囦欢浠ュ尮閰嶅叾鍐呭 + +13.- **楠岃瘉** nsp锛宯sx锛宯sz锛寈ci鍜宯ca鏂囦欢 + +14.-浠ユ枃鏈牸寮忚緭鍑轰俊鎭 + +15.-鎻愬彇nsp鏂囦欢鐨勫唴瀹**鍜寈ci鏂囦欢鐨勫畨鍏ㄥ垎鍖 + +16.-灏嗕綔涓氳缃负浠ュ悗鍦ㄥ妯″紡涓 + +17.-鍦ㄥ妯″紡涓嬫寜鍩烘湰鏍囬鍒嗛殧浣滀笟 + +18.- **浠庢枃浠跺悕涓垹闄ゅ潖瀛楃**锛堟竻闄わ級鎴栧皢浜氭床鍚嶇О杞崲涓虹綏椹瓧 + +19.-涓哄熀鏈父鎴忓拰DLC鎻愬彇nca鏂囦欢鍐呭锛屾垨灏唍cas鎻愬彇涓虹函鏂囨湰 + +20.- ** Joiner **閫傜敤浜巟c *锛宯s *鍜0 * fat32鏂囦欢 + +21.-灏唍sp鏂囦欢鍘嬬缉涓.nsz鏂囦欢 + +22.- **鍥惧舰鐣岄潰**锛岀敤浜庨氳繃鍦–hrome \ chrome涓婅繍琛岀殑gui鐨刧ui鏈湴鏂囦欢鍜孏oogle椹卞姩鍣ㄤ笂鐨勬枃浠剁殑淇℃伅 + +23.-浣跨敤NSC_Builder淇敼鐨刵sp \ xci鐨勨滄仮澶嶁濆埌鍏跺師濮嬫父鎴弉ca鏂囦欢銆 + +## 3.1鍦―BI瀹夎绋嬪簭鐨勫府鍔╀笅锛屽畠鍙互锛 + +24.- **閫氳繃鏈湴浜ゆ崲鏈轰粠Google椹卞姩鍣紙韬唤楠岃瘉鍜岄摼鎺ワ級鎴栦粠1fichier瀹夎鎴栦紶杈撴枃浠**鑷砿tp + +25.- **浠嶱C鍒颁氦鎹㈡満鐨** xcis鍜屽鍐呭xcis鐢熸垚鍜屼紶杈** + +26.- **鑷姩鏇存柊**鎮ㄧ殑Nintendo Switch鍦ㄦ湰鍦版垨浠庤胺姝岄┍鍔ㄥ櫒 + +27- **閫氳繃nutdb鎼滅储宸插畨瑁呮父鎴忕殑鏂版洿鏂板拰DLC **锛屼互渚垮湪娓告垙鍗′腑鎼滅储宸插畨瑁呮父鎴忓拰xci + +28- **浠嶯intendo Switch涓婅浆鍌ㄦ垨淇濆瓨娓告垙** + +29- **鍗歌浇**鎮ㄧ殑娓告垙骞跺垹闄ゅ瓨妗g殑娓告垙/鍗犱綅绗 + +30- **鐢熸垚骞朵紶杈揝X鑷姩鍔犺浇鍣ㄦ枃浠**锛岀敤浜庤嚜鍔ㄥ皢xcis鎸傝浇鍒癝D鍜孒DD浣嶇疆锛屼互渚涘彲鎵弿浣嶇疆浣跨敤锛岃屼笉鑳借SX OS鎵弿 + +31- **娓呯悊閲嶅鐨凷X OS鑷姩鍔犺浇鍣ㄦ枃浠**锛屼互閬垮厤SD鍜孒DD鏂囦欢涔嬮棿鍙戠敓鍐茬獊 + +## 4.鎵瑰鐞嗘ā寮忥細 + +鎵瑰鐞嗘湁2绉嶆ā寮忥細 + +-**鑷姩妯″紡锛**鎮ㄥ彲浠ュ垎鍒嫋鍔╪sp鏂囦欢鎴栧叿鏈夊涓枃浠剁殑鏂囦欢澶癸紝浠ヨ繘鍏ヨ嚜鍔ㄦā寮忋 + +-**鎵嬪姩妯″紡锛**鍙屽嚮鎵瑰鐞嗭紝鎮ㄥ彲浠ュ缓绔嬭澶勭悊鐨勬枃浠跺垪琛ㄣ + +閫氳繃鈥滄墜鍔ㄦā寮忎笅鐨勯厤缃彍鍗曗濋厤缃嚜鍔ㄦā寮忕殑琛屼负銆 + +## 5.鎵嬪姩妯″紡閫夐」锛 + +-**妯″紡0锛氶厤缃ā寮忋**璁╂偍閰嶇疆绋嬪簭鍦ㄨ嚜鍔ㄥ拰鎵嬪姩妯″紡涓嬬殑杩愯鏂瑰紡銆 +-**妯″紡1锛氱嫭绔嬫墦鍖呫**璁╂偍澶勭悊鏂囦欢鍒楄〃骞跺崟鐙墦鍖 + *鎵撳寘涓簄sp \ xci + * Supertrimm \ Trimm \ Untrimm xci鏂囦欢 + *閲嶅懡鍚峹ci鎴杗sp鏂囦欢 + *鎸塩nmt椤哄簭閲嶅缓nsp鏂囦欢骞舵坊鍔燾nmt.xml + *楠岃瘉nsp锛寈ci鏂囦欢 +-**妯″紡2锛氬娆℃墦鍖呫**璁╂偍灏嗘枃浠跺垪琛ㄦ墦鍖呭埌鍗曚釜xci鎴杗sp鏂囦欢涓 + *閫氳繃baseid鍒嗗紑鏂囦欢 + *璁剧疆浣滀笟浠ヤ緵浠ュ悗 + *澶勭悊浠ュ墠鐨勫伐浣 +-**妯″紡3锛歁ulti-Content-Splitter銆**璁╂偍灏嗗唴瀹瑰垎绂讳负nsp鍜寈ci鏂囦欢銆 +-**妯″紡4锛氭枃浠朵俊鎭**璁╂偍鏌ョ湅骞跺鍑烘湁鍏硁sp鍜寈ci鏂囦欢鐨勪竴浜涗俊鎭 + *鏈夊叧nsp \ xci涓寘鍚枃浠剁殑鏁版嵁 + *鏈夊叧鏂囦欢涓唴瀹笽D鐨勬暟鎹 + *铻烘瘝淇℃伅鐢眀lawar瀹炴柦 + *鏈夊叧鍥轰欢瑕佹眰鍜屽叾浠栨父鎴忔暟鎹殑淇℃伅 + *浠巑eta nca璇诲彇cnmt鏂囦欢 + *浠庢帶浠秐ca璇诲彇nacp鏂囦欢 + *浠庣▼搴弉ca璇诲彇npdm鏂囦欢 + *楠岃瘉鏂囦欢鏄惁鍏锋湁妫娴婲SCB鏇存敼鐨勮兘鍔 +-**妯″紡5锛氭暟鎹簱妯″紡銆**璁╂偍澶ч噺杈撳嚭淇℃伅 +-**妯″紡6锛氶珮绾фā寮忋** + *浠巒sp \ xci鎻愬彇鎵鏈夊唴瀹 + *浠ュ師濮嬫ā寮忎粠nsp \ xci涓彁鍙栨墍鏈夊唴瀹 + *浠ョ函鏂囨湰鏍煎紡浠巒sp \ xci涓彁鍙栨墍鏈夊唴瀹 + *浠巒sp \ xci涓殑nca鎻愬彇鏂囦欢 + *淇ˉ闇瑕侀摼鎺ラ摼鎺ユ暟鐨勬父鎴 +-**妯″紡7锛氭枃浠跺悎骞跺櫒妯″紡銆**鍔犲叆fat32鍒嗗壊鐨勬枃浠 +-**妯″紡8锛氬帇缂‐瑙e帇缂** + *灏唍sp鏂囦欢鍘嬬缉涓簄sz鏍煎紡 + *灏唍sz鏂囦欢瑙e帇缂╀负nsp鏂囦欢 +-**妯″紡9锛氭枃浠惰繕鍘熸ā寮忋**鎭㈠鍙獙璇佺殑淇敼鏂囦欢 +-** L锛氭棫鐗堟ā寮忋**鏃у姛鑳 +-** D锛欸OOGLE DRIVE MODE锛** + *浠庤胺姝岄┍鍔ㄥ櫒涓嬭浇鏂囦欢 + *姝e父涓嬭浇鍔熻兘 + *鎼滅储杩囨护鍣ㄥ拰搴撻夋嫨 + *涓嬭浇淇暣杩囩殑xci鏂囦欢 + *涓嬭浇瑙e帇鐨刵sz鏂囦欢 + *妫鏌ユ湁鍏虫枃浠剁殑淇℃伅 +-** M锛歁TP妯″紡锛** + *浠庢湰鍦版枃浠舵垨杩滅▼搴撳畨瑁呮父鎴 + *浠庢湰鍦版枃浠舵垨杩滅▼搴撹繘琛屾枃浠朵紶杈 + *姝e父杞Щ + *鐢熸垚xci骞朵紶杈 + *鐢熸垚澶歺ci骞朵紶杈 + * **閫氳繃鏈湴搴撴垨Google椹卞姩鍣ㄥ簱鑷姩鏇存柊**璁惧 + * **杞偍鎴栧嵏杞芥枃浠** + *灏嗗畨瑁呯殑鍐呭浠庤澶囪浆鍌ㄥ埌PC + *鍗歌浇璁惧涓婂凡瀹夎鐨勫唴瀹 + *浠嶱C鍒犻櫎瀛樻。鐨勬父鎴忔垨鍗犱綅绗︽潯鐩 + * **閬靛惊JKSV鏍煎紡鐨剒ip澶囦唤Savegames ** + * **鏄剧ず璁惧淇℃伅** + *閫氳繃mtp鍏变韩鐨勮澶囦俊鎭 + *鍦ㄨ澶囦笂鏄剧ず宸插畨瑁呯殑娓告垙鍜寈ci + *鏄剧ず璁惧涓婂凡瀹夎鐨勬父鎴忓拰xci鐨勬柊鏇存柊鍜宒lc銆備负浜嗗噯纭э紝xci蹇呴』閬靛惊NSCB鏍煎紡锛屽寘鎷琧ontent_number鏍囩 + *鏄剧ず瀛樻。鐨勬父鎴/鍗犱綅绗︽敞鍐岃〃 + *鏄剧ず瀛樻。娓告垙鐨勫彲鐢ㄦ洿鏂板拰DLC鍒楄〃 + * **鐢熸垚SX鑷姩鍔犺浇鍣ㄦ枃浠** + *鍦⊿D涓婁负xci鐢熸垚鏂囦欢 + *鍦ㄧ‖鐩樹腑涓簒ci鐢熸垚鏂囦欢锛屽彲浠ラ夋嫨鎺ㄩ佸苟涓嶴D鏂囦欢杩愯鍐茬獊妫鏌 + *浠庡簱鏂囦欢澶逛腑鎺ㄩ丼X鑷姩鍔犺浇鍣ㄦ枃浠 + *杩愯鍐茬獊妫鏌ワ紝娓呯悊鏈娇鐢ㄧ殑SD鑷姩鍔犺浇鍣ㄦ枃浠讹紝娓呯悊鎸囧悜HDD鐨勫啿绐佽嚜鍔ㄥ姞杞藉櫒鏂囦欢锛堝鏋淪D涓凡缁忓瓨鍦ㄥ叿鏈夎ID鐨剎ci锛 + +## 6.閰嶇疆妯″紡锛 + +####鑷姩妯″紡閫夐」銆 锛堜粎褰卞搷鑷姩妯″紡锛 + +##### I.REPACK閰嶇疆 + +-NSP +-XCI +-涓よ + +##### II銆傛枃浠跺す鐨勫鐞 + +-鍒嗗埆閲嶆柊鎵撳寘鏂囦欢澶圭殑鏂囦欢锛堝崟涓唴瀹规枃浠讹級 +-閲嶆柊鍖呰鏂囦欢澶圭殑鏂囦欢锛堝鍐呭鏂囦欢锛 + +##### III銆 RSV淇ˉ绋嬪簭閰嶇疆 + +-淇ˉ绋嬪簭瑕佹眰鐨勭郴缁熺増鏈紙濡傛灉澶т簬鍔犲瘑鐗堟湰锛 +-濡傛灉淇ˉ绋嬪簭澶т簬鍔犲瘑鐗堟湰锛岃涓嶈瀵瑰叾杩涜淇ˉ + +##### IV銆 KEYGENERATION閰嶇疆 + +-璁剧疆鏂囦欢鍏佽鐨勬渶澶у瘑閽ョ敓鎴愶紙鍔犲瘑锛夈 + +##### V.鍏ㄥ眬閫夐」銆 锛堝奖鍝嶇▼搴忓湪鍏ㄧ悆鑼冨洿鍐呯殑宸ヤ綔鏂瑰紡锛 + +##### VI銆傛枃瀛楀拰鑳屾櫙棰滆壊 + +-璁╂垜浠夋嫨cmd绐楀彛鐨勯鑹 + +涓冦傚伐浣滄枃浠跺す鐨勫悕绉 + +-璁╂垜浠夋嫨宸ヤ綔鏂囦欢澶圭殑鍚嶇О + +鍏傝緭鍑烘枃浠跺す鐨勫悕绉 + +-璁╂垜浠夋嫨杈撳嚭鏂囦欢澶圭殑鍚嶇О鍜屼綅缃 + +##### IX銆 DELTA鏂囦欢澶勭悊 + +-璁╂偍閫夋嫨鏄惁瑕佹墦鍖呭閲廚CA鏂囦欢銆傞粯璁ゆ儏鍐典笅璁剧疆涓篺alse銆 + +##### X. AUTO-EXIT閰嶇疆 +-璁╂垜浠夋嫨鏄惁鍦ㄥ畬鎴愪綔涓氬悗鍏抽棴cmd绐楀彛銆 + +鍗佷竴銆傚瘑閽ョ敓鎴愭彁绀 + +-璁╂偍閫夋嫨鏄惁瑕佹煡鐪嬫彁绀猴紝瑕佹眰鎮ㄥ湪鎵嬪姩妯″紡涓嬩慨琛SV鍜屽瘑閽ョ敓鎴愩 + +##### XII銆傛枃浠舵祦BUFFER + +-鏂囦欢娴佹搷浣滅殑缂撳啿鍖 + +##### XIII銆傛枃浠禙AT32 \ EXFAT閫夐」 + +灏唜ci鎴杗sp鎵撳寘涓篺at32鍏煎鏍煎紡鎴杄xfat鏍煎紡銆 + +-灏嗗崱鏍煎紡鏇存敼涓篹xfat锛堥粯璁わ級 +-灏哠X OS鐨凜ARD FORMAT鏇存敼涓篺at32锛坸c0鍜宯s0鏂囦欢锛 +-灏嗘墍鏈塁FW锛堝瓨妗f枃浠跺す锛夌殑CARD FORMAT鏇存敼涓篺at32 + +##### XIV銆傚浣曠粍缁囪緭鍑烘枃浠讹紙褰撳墠鏈湪鏂版ā寮忎笅浣跨敤锛 + +-鍒嗗紑缁勭粐鏂囦欢锛堥粯璁わ級 +-缁勭粐鎸夊唴瀹硅缃殑鏂囦欢澶逛腑鐨勬枃浠 + +##### XV銆傝缃柊妯″紡鎴栨棫妯″紡 + +-浣跨敤鏂扮殑鏇撮珮绾х殑鏂规硶锛堥粯璁わ級 +-浣跨敤鏃х殑鏂囦欢澶勭悊鏂规硶 + +##### XVI銆備娇鐢ㄧ洿鎺ュ閲嶆椂鐨凴OMANIZE鍚嶇О + +-灏嗗悕绉拌浆鎹负缃楅┈瀛楋紙榛樿锛 +-浠庢枃浠朵腑璇诲彇鍚嶇О锛屽苟鍦ㄨ鍙栨椂淇濈暀浜氭床鍚嶇О + +##### XVII銆備娇鐢℅oogle缈昏瘧鍣ㄤ粠娓告垙淇℃伅涓炕璇戣鏄 + +-FALSE锛堥粯璁わ級 +-鏄殑缈昏瘧鏃ユ枃锛屼腑鏂囧拰闊╂枃璇存槑銆 + +##### XVIII銆傚伐浜轰娇鐢ㄥ绾跨▼杩涜閲嶅懡鍚嶅拰鏁版嵁搴撴瀯寤 + +-1锛堥粯璁宸插仠鐢級 +- 浣犵殑鍙风爜銆備娇鐢ㄥ涓伐浣滅▼搴忓悓鏃惰繘琛屽涓噸鍛藉悕鎴栧垱寤哄涓暟鎹簱瀛楃涓 + +## 7. Gui鎻愪緵鏂囦欢淇℃伅锛 + +-** NSCB File_Info **鏄熀浜巋tml鐨刧ui锛屽畠涓篘SCB淇℃伅鎻愪緵浜嗗浘褰㈢晫闈€ + 鏄殑锛屽畠鍖呭惈娓告垙鍥炬爣锛屽浘鐗囦互鍙婃偍鍠滄鐨勪笢瑗裤 + +-褰撳墠鍔熻兘鏄細 + + * **娓告垙淇℃伅**銆傜粨鍚堜簡浠庢枃浠惰鍙栫殑鏁版嵁鍜屾潵鑷狽utdb鐨別shop鏁版嵁 + * **鎻忚堪锛**鏉ヨ嚜eshop锛坣utdb锛夌殑鎻忚堪 + * **鍥剧墖搴擄細**鏉ヨ嚜eshop鐨勫浘鐗囷紙nutdb锛 + * ** BaseID鏂囦欢鏍戯細**鏄剧ずDLC鐨勬渶鏂扮増鏈互鍙婁笌娓告垙锛坣utdb锛夌浉鍏崇殑鏇存柊 + * **鏍囬锛**鏉ヨ嚜NSCB鐨勯珮绾ф枃浠跺垪琛紙鏂板锛 + * NSCB鐨** NACP Reader ** + * NSCB鐨** NPDM Reader ** + * **鏉ヨ嚜NSCB鐨凜NMT闃呰鍣** + * **鏉ヨ嚜NSCB鐨勯獙璇**锛岀洿鍒扮2绾э紝鍥犳鍙互蹇熷姞杞姐傜幇鍦ㄤ娇鐢ㄦ櫘閫歂SCB杩涜鍝堝笇澶勭悊銆 + * **娓告垙淇℃伅**銆傜粨鍚堜簡浠庢枃浠惰鍙栫殑鏁版嵁鍜屾潵鑷狽utdb鐨別shop鏁版嵁 + * **鍥句功棣**銆備粠鏈湴搴撴垨Google椹卞姩鍣ㄥ姞杞芥枃浠讹紝骞朵笖涔嬪墠宸茶缃簡搴撲綅缃 + * **鐩存帴閾炬帴**銆備粠鐩存帴閾炬帴涓鍙栦俊鎭 + +-鎮ㄤ細娉ㄦ剰鍒扮幇鍦ㄦ坊鍔犱簡璇稿BuildIDs涔嬬被鐨勪竴浜涗俊鎭紝浣縞nmt鏇村叿鍙鎬э紝骞朵笖鎴戞坊鍔犱簡瀵笹randia鍜孒otline Miami绛夊绋嬪簭娓告垙鐨勬娴 + +- **宸茬煡鐨勯棶棰橈細** + + * CSS鍙兘闇瑕佸仛涓浜涘伐浣滐紝鐗瑰埆鏄浜庡叏灞忔樉绀恒 + *涓婅鑿滃崟鏄竴涓崰浣嶇 + *鍦ㄦ煇浜涙父鎴忎腑NPDM瑙e瘑澶辫触锛屽湪鎴戠殑TODO鍒楄〃涓 + *澶氬唴瀹规枃浠讹紙閫氬父涓簒ci锛夊彲鑳介渶瑕佸仛涓浜涘伐浣滀互鎻愰珮瑙f瀽閫熷害 + *涓嶈鍙栧皻鏈垎鍓茬殑鏂囦欢锛坣s *锛寈c *锛0 *锛夛紝浣嗗緢蹇氨浼氭坊鍔 + +- **鍘诲仛锛** + + *杈撳嚭CSS鍒颁富棰樻枃浠 + *璇█缈昏瘧 + *绉绘NSCB鍔熻兘 + *璁╃敤鎴烽夋嫨nutdb鏂囦欢 + +- **濡備綍浣跨敤锛** + + *濡傛灉鎮ㄥ凡瀹夎Chrome鎴朇hromium锛屽垯鍙互浣跨敤銆 + *濡傛灉鎮ㄤ笉鎯冲畨瑁呰繖浜涙祻瑙堝櫒锛屽垯鍙互浣跨敤渚挎惡寮廋hrome銆 +1.鍦ㄦ澶勮幏鍙栫郴缁熺殑鏈鏂扮増鏈細https://chromium.woolyss.com/ +2.鍦▃tools涓垱寤轰竴涓悕涓衡 Chromium鈥濈殑鏂囦欢澶 +3.瑙e帇缂㏄C涓婄殑Chrome鏂囦欢锛岀劧鍚庢墽琛屸 chrlauncher 2.5.6锛64浣嶏級.exe鈥濇垨zip涓殑浠讳綍璋冪敤锛屼互涓嬭浇鎵闇鐨勬枃浠 +4.灏嗘墍鏈夋枃浠剁Щ鍔ㄥ埌ztools \ Chromium锛岀劧鍚庡皢鈥 chrlauncher 2.5.6锛64浣嶏級.exe鈥濋噸鍛藉悕涓衡 chrlauncher.exe鈥濄傝繖浼樺厛浜巆hrome \ chromium瀹夎 + *瀹屾垚鎵鏈夎缃悗锛屽彧闇鎵ц鈥 Interface.bat鈥 +5.璁颁綇锛屾偍闇瑕佸湪ztools涓~鍐檏eys_template.txt锛屼絾鎴戞兂鎮ㄥ凡缁忕煡閬 +-鎴戜娇鐢╬ython锛 + *鍙渶鑾峰彇鏈鏂扮殑python 3骞跺畨瑁呬互涓嬩緷璧栭」锛 +urllib3 unidecode tqdm bs4 tqdm璇锋眰鍥惧儚pywin32 pycryptodome pykakasi googletrans chardet槌楅奔鐡 + *鐜板湪妫樻墜鐨勯儴鍒嗘槸锛屾垜浣跨敤鐨勬槸鏈湪pypy涓彂甯冪殑槌楅奔鐨勬湭鍙戝竷鐗堟湰锛屾墍浠ヨ杞埌姝ゅhttps://github.com/ChrisKnott/Eel涓嬭浇姣嶇増锛屾壘鍒版偍鐨勯硹楸煎畨瑁呮墍鍦ㄧ殑鏂囦欢澶癸紝骞朵娇鐢ㄩ偅浜涘湪涓讳汉銆 +濡傛灉鎮ㄦ壘涓嶅埌瀹冿紝璇峰皾璇曞啀娆℃墽琛宲ip install eel锛屽畠灏嗗憡璇夋偍鏈鏂颁俊鎭苟瀹夎鍦ㄢ X鈥濇枃浠跺す涓 + *鐒跺悗鎵ц鈥 Interface.bat鈥 +-鎴戜娇鐢╨inux鎴杕ac锛 + *濂藉惂锛屾垜鍦↙inux涓婅繘琛屼簡娴嬭瘯锛屼互鍚庢垜浼氱粰鎮ㄤ竴涓増鏈紝蹇呴』鎵胯鎴戞病鏈夊湪Mac涓婅繘琛屼换浣曟祴璇曪紝灏界鎴戣涓哄畠鍙互宸ヤ綔 + *瀹夎python骞讹細 +urllib3 unidecode tqdm bs4 tqdm璇锋眰鍥惧儚pycryptodome pykakasi googletrans chardet槌楅奔鐡 + *涓庝箣鍓嶅拷鐣SCB鐢ㄤ簬鍦ㄦ枃浠跺す涓缃瓨妗d綅鐨刾ywin32鐩稿悓 + *灏嗛硹楸兼枃浠舵浛鎹负涓婇潰璇存槑鐨刴aster鏂囦欢涓殑鏂囦欢銆 + *杩愯鏉鹃紶锛 +squirrel.py -lib_call鎺ュ彛鍚姩 + *鎴栬咃紝濡傛灉鎮ㄤ笉鍠滄python锛岃绛夊緟鍑犲ぉ杩涜鏋勫缓 + +## 8. File_Info Gui绀轰緥锛 + +锛乕鍥剧墖]锛坔ttps://i.ibb.co/12kCsDk/FI1.png锛 +锛乕Picture2]锛坔ttps://i.ibb.co/R93H02v/FI3.png锛 +锛乕Picture3]锛坔ttps://i.ibb.co/HCfTdxj/FI11.png锛 + +## 9.閲嶈 + +鐢变簬璇ュ師鍥狅紝璇ョ▼搴忚瘯鍥句慨鏀筺sp鍜寈ci鏂囦欢涓殑鏈灏忔暟鎹紝鍥犳瀹冮渶瑕佺鍚嶈ˉ涓佹潵蹇界暐NCA鏍囧ご涓殑涓や釜绛惧悕銆傚凡缁忓寘鍚畠浠殑鍥轰欢鏄細 +-SX鎿嶄綔绯荤粺 +-ReiNX +https://github.com/Reisyukaku/ReiNX/releases +-瀵逛簬Kosmos锛岃浣跨敤joonie86 sigpatches鍜孒ekate5.0鎴杍oonie86 Hekate Mode锛屽嵆J +https://github.com/Joonie86/hekate/releases/tag/5.0.0J +-瀵逛簬澶ф皵浣跨敤4n淇″彿 +https://gbatemp.net/attachments/2-0-0-8-1-0-zip.170607/ + +瑕佸畨瑁卪ulti-nsp锛屾偍闇瑕佷笌瀹冧滑鍏煎鐨勫畨瑁呯▼搴忋傛姤鍛婄殑鍏煎瀹夎绋嬪簭鏄細 +-SX OS rom鑿滃崟 +-SX OS瀹夎绋嬪簭 +-甯冩媺鐡﹀皵鐨勯敗绠旂焊锛 +https://github.com/digableinc/tinfoil +-Blawar鐨則infoil鎴栬匧ithium锛 +http://tinfoil.io/Download#download +- DuckBill鐨凞BI瀹夎鍣 +https://github.com/rashevskyv/switch/releases/tag/456 +- Awoo瀹夎鍣 +https://github.com/Huntereb/Awoo-Installer + +瑕佸畨瑁卬cz鏂囦欢锛屾偍闇瑕侊細 +-SX OS瀹夎绋嬪簭 +-Blawar鐨凾infoil锛 +https://github.com/digableinc/tinfoil +- DuckBill鐨凞BI瀹夎鍣 +https://github.com/rashevskyv/switch/releases/tag/456 +- Awoo瀹夎鍣 +https://github.com/Huntereb/Awoo-Installer + +## 10.瑕佹眰 + +-闇瑕佽鏈塛indows鎿嶄綔绯荤粺鐨勮绠楁満 +-鍦▃tools鏂囦欢澶逛腑濉厖keys_template.txt骞跺皢鍏堕噸鍛藉悕涓簁eys.txt + 濡傛灉鎮ㄧ殑鎺у埗鍙颁负FW6.2鎴栦互涓嬬増鏈紝鍒欏彲浠ヤ娇鐢↙ockpick鑾峰彇瀹屾暣鐨勫瘑閽ラ泦 + 鏈嬪弸鍙互鍊熺粰鎮ㄦ墍闇鐨勯挜鍖欍 + 濡傛灉瑕佹坊鍔爔ci_header_key锛屽垯鏈嬪弸闇瑕佸皢鍏跺熺粰鎮ㄣ + https://github.com/shchmue/Lockpick/releases +-mtp鍔熻兘瑕佹眰4.0鎴栨洿楂樼増鏈紝浣嗕互4.7.2缃戠粶妗嗘灦涓虹洰鏍囨瀯寤恒傜綉缁滄鏋剁殑鎺ㄨ崘鐗堟湰涓4.7.2鍜4.8.0 + +## 11.灞闄愭 +-鍒朵綔瓒呰繃8涓父鎴忕殑澶氬唴瀹箈ci鏂囦欢銆傚湪姘村钩鏂瑰悜鍔犺浇鏃朵細鍑洪敊銆傛垜鎬鐤戣繖鍙兘鏄痲launcher鐨勯檺鍒讹紝鍥犳鍙互涓庝富棰榤od涓璧蜂娇鐢紝浣咺NTRO骞舵湭瀵瑰叾杩涜娴嬭瘯銆 +娉ㄦ剰锛氳繖鎰忓懗鐫鈥滄父鎴忊濓紝鏇存柊鍜宒l car涓嶅彈姝ら檺鍒躲 +-浠6.0寮濮嬶紝鏌愪簺娓告垙鐨勬爣棰樻潈鍒╁垹闄lc浼氱粰鍑烘秷鎭彁绀猴紝鍐呭涓嶅畬鏁达紝璇ユ秷鎭彲浠ヨ烦杩囷紝骞朵笖灏界鏈夋彁绀猴紝浣哾lc浠嶅彲浠ユ甯稿伐浣溿 +-褰撳墠鐨刴tp妯″紡鏃犳硶鍗虫椂瀵规父鎴忚繘琛岃ˉ涓乗杞崲锛屽畠闇瑕佸疄鐜板娴佽繘琛岃ˉ涓佺殑鍔熻兘鎴栭氳繃鏉ヨ嚜鏉鹃紶鐨勫鎺ュ瓧鍙戦佹枃浠剁殑鍔熻兘銆傚皢鏉ュ皢瀹炴柦杩欎袱涓夐」涔嬩竴銆 + +## 12.鎰熻阿鍜屾劅璋 + +** NSC_Builder鍩轰簬** + +a銆傦級鍧氭灉锛氬鏋滄病鏈夋渶鍑鸿壊鐨凷witch鍦烘櫙鍒朵綔浜轰箣涓鐨勨 blawar鈥濈殑宸ヤ綔锛岄偅涔堝湪杩欎竴鐐逛笂鏄笉鍙兘鐨勩 +https://github.com/blawar/nut + +b銆傦級Hacbuild锛歺ci閲嶆柊鎵撳寘鍔熻兘鍩轰簬LucaFraga鍒堕犵殑hacbuild鐨勪唬鐮 + +-鍘熷hacbuild锛歀ucaFraga鐨刪ttps://github.com/LucaFraga/hacbuild锛 + +-鎴戜慨鏀硅繃鐨刪acbuild锛歨ttps://github.com/julesontheroad/hacbuild + +c銆傦級mtp妯″紡鍦ㄥ緢澶х▼搴︿笂渚濊禆浜嶥UCKBILL鐨凞BI瀹夎绋嬪簭銆傚叿浣撴潵璇达紝宸蹭娇鐢―BI 1.25杩涜浜嗘祴璇 + +-DBI鍖呭惈鍦╧effir CFW鍖呬腑锛歨ttps://github.com/rashevskyv/switch/releases + +-DBI 1.25棣栧厛鍖呭惈鍦ㄦ鐗堟湰涓細https://github.com/rashevskyv/switch/releases/tag/456 + +-鍦∟SCB涓绘枃浠跺す锛堢О涓衡 DBI鈥濓級涓紝涔熷彲浠ュ湪nro鍜宯sp涓壘鍒皁d鐨勫壇鏈琽d銆 + +d銆傦級blawar鐨刵sz锛寈cz鍜宯cz瑙勮寖锛歨ttps锛//github.com/blawar/nsz + +e銆傦級鎰熻阿浠栫殑涓嶉棿鏂府鍔╋紝杈惧埌0Liam銆 + +f銆傦級浠巔ythac锛圧ikikooo鍒堕狅級鏀圭紪鐨刾yNCA3锛宲yNPDM锛宲yPFS0锛宲yRomFS搴 + +g銆傦級浠巇agnelies鏀圭紪Pysos鐢ㄤ簬鏌愪簺鎿嶄綔锛歨ttps://github.com/dagnelies/pysos + +**杩樻劅璋細** + +Nicoboss鏈鍒濈殑nsp鍜寈ci鍘嬬缉鎬濇兂锛 +https://github.com/nicoboss/nsZip/ + +妯℃嫙浜恒備粬鍒朵綔浜唖plitNSP.py锛岃绠楀嚭Horizo鈥嬧媙鏍煎紡鍒嗗壊鐨刵sps鎵闇鐨勫潡澶у皬锛堜笌鍒嗗壊鐨剎ci鍧楀ぇ灏忎笉鍚岋級鍜屽瓨妗f枃浠跺す鐨勯渶瑕侊級 +https://github.com/AnalogMan151/splitNSP/releases + +鍚慚adScript77鎻愬嚭浠栫殑浼熷ぇ寤鸿锛岀壒鍒槸璇ユ壒娆$殑閰嶇疆鏂囦欢鐨勬兂娉曘 + +Thx涓0mn0锛岃丼H鍥㈤槦鎬绘槸涔愪簬鍔╀汉銆 + +鎰熻阿evOLved锛屾湵鐮傚拰鏌愪簺宸ㄩ緳锛屼粬浠彁渚涗簡甯姪鍜屽ソ鐨勫缓璁 + +鍚屾椂杩樿鎰熻阿鏉ヨ嚜gbatemp锛宔lotrolado.net鐨勬墍鏈夋垚鍛樹互鍙婁笉鍜岃皭鐨勬垜鐨勬湅鍙;锛 + + +* 2020骞-JulesOnTheRoad-https://github.com/julesontheroad/NSC_BUILDER* \ No newline at end of file diff --git a/py/Regional/ZH/Server.bat b/py/Regional/ZH/Server.bat new file mode 100644 index 00000000..0a1a0211 --- /dev/null +++ b/py/Regional/ZH/Server.bat @@ -0,0 +1,70 @@ +@ECHO OFF +:TOP_INIT +set "prog_dir=%~dp0" +set "bat_name=%~n0" +set "ofile_name=%bat_name%_options.cmd" +Title NSC_Builder v1.00c -- Profile: %ofile_name% -- by JulesOnTheRoad +set "list_folder=%prog_dir%lists" +::----------------------------------------------------- +::编辑此变量以链接其他选项文件 +::----------------------------------------------------- +set "op_file=%~dp0zconfig\%ofile_name%" + +::----------------------------------------------------- +::从选项文件复制选项 +::----------------------------------------------------- +setlocal +if exist "%op_file%" call "%op_file%" +endlocal & ( +REM 环境变量 +set "pycommand=%pycommand%" +set "start_minimized=%start_minimized%" +set "videoplayback=%videoplayback%" +set "port=%port%" +set "host=%host%" +set "noconsole=%noconsole%" +set "pycommandw=%pycommandw%" +set "ssl=%ssl%" +REM 程序 +set "squirrel=%nut%" +REM 文件 +set "dec_keys=%dec_keys%" +) +::----------------------------------------------------- +::设置绝对路径 +::----------------------------------------------------- +::程序完整路径 +if exist "%~dp0%squirrel%" set "squirrel=%~dp0%squirrel%" + +::Important files full route +if exist "%~dp0%dec_keys%" set "dec_keys=%~dp0%dec_keys%" +::输出文件夹 +CD /d "%~dp0" +if not exist "%dec_keys%" ( goto missing_things ) + +if "%start_minimized%" EQU "yes" ( goto minimize ) +goto start +:minimize +if not "%1" == "min" start /MIN cmd /c %0 min & exit/b >nul 2>&1 +:start +%pycommand% "%squirrel%" -lib_call nutdb check_files +if "%noconsole%" == "false" (%pycommand% "%squirrel%" -lib_call Interface server -xarg "%port%" "%host%" "%videoplayback%" "%ssl%" ) +if "%noconsole%" == "false" goto salida +start %pycommandw% "%squirrel%" -lib_call Interface server -xarg "%port%" "%host%" "%videoplayback%" "%ssl%" "%noconsole%" +goto salida + +:missing_things +echo .................................... +echo 您缺少以下内容 : +echo .................................... +echo. +::文件完整路径 +if not exist "%dec_keys%" echo - "keys.txt"文件指向不正确或者缺失。 +echo. +pause +echo 程序即将退出 +PING -n 2 127.0.0.1 >NUL 2>&1 +goto salida +:salida +REM pause +exit diff --git a/py/Regional/ZH/install_dependencies.bat b/py/Regional/ZH/install_dependencies.bat new file mode 100644 index 00000000..6ab8adcf --- /dev/null +++ b/py/Regional/ZH/install_dependencies.bat @@ -0,0 +1,40 @@ +@ECHO OFF +set "pycommand=py -3" +set "op_file=%~dp0zconfig/NSCB_options.cmd" +call :program_logo +setlocal +if exist "%op_file%" call "%op_file%" +endlocal & ( +set "pycommand=%pycommand%" +) + +ECHO. +ECHO 安装依赖项 +ECHO. +%pycommand% -m pip install --upgrade pip +%pycommand% -m pip install wheel +%pycommand% -m pip install urllib3 unidecode tqdm bs4 tqdm requests image pywin32 pycryptodome pykakasi googletrans chardet eel bottle zstandard colorama google-auth-httplib2 google-auth-oauthlib windows-curses oauth2client comtypes +%pycommand% -m pip install --upgrade google-api-python-client +ECHO. +ECHO ********************************************************************************** +ECHO ---重要:在继续之前,请检查所有依赖项是否都已经正确安装了--- +ECHO ********************************************************************************** +ECHO. +PAUSE +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO 任天堂SWITCH清理打包工具 +ECHO (多重XCI打包和更多功能) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= JULESONTHEROAD开发 ============================= +ECHO ------------------------------------------------------------------------------------- +exit /B \ No newline at end of file diff --git a/py/Regional/ZH/zconfig/Interface_options.cmd b/py/Regional/ZH/zconfig/Interface_options.cmd new file mode 100644 index 00000000..027906da --- /dev/null +++ b/py/Regional/ZH/zconfig/Interface_options.cmd @@ -0,0 +1,62 @@ +::-------------------------------------------------------------- +::为批处理文件设置自定义颜色 +::-------------------------------------------------------------- +rem color 1F +::-------------------------------------------------------------- +::选项 1: 程序路径 +::-------------------------------------------------------------- +set "nut=ztools\squirrel.py" +::python命令 +set "pycommand=py -3" +set "pycommandw=pyw -3" +::-------------------------------------------------------------- +::界面选项 +::-------------------------------------------------------------- +::************************************************************** +::使用GUI最小化启动控制台 yes\no +::************************************************************** +set "start_minimized=yes" +::************************************************************** +::浏览器路径。 使用自动,默认和添加一个路径 +::************************************************************** +::自动偏好顺序 +::1. Chromium便携版 +::2. Slimjet便携版 +::3. Chrome或者Chromium已安装在系统里 +::4. Microsoft Edge +::Default: 使用默认系统浏览器(低兼容性) +::Path: 将auto替换为浏览器的路径,以exe结尾 +::Path: 将auto替换为.lnk文件的路径(快捷方式) +::Path: 将名称添加到ztools\chromium中的.lnk文件。 +::例如 "brave.lnk" 将重定向到启动brave浏览器的exe路径 +set "browserpath=chrome" +::************************************************************** +::启用视频播放 +::************************************************************** +set "videoplayback=true" +::************************************************************** +::初始高度和宽度 +::************************************************************** +set "height=800" +set "width=740" +::************************************************************** +::端口 +::************************************************************** +::auto -> 任意打开的端口 +::rg8000 -> 在端口号8000和8999之间任意打开的端口 +::Port number -> 固定的端口(例如8000) +::Auto and rg8000 -> 允许多窗口 +set "port=rg8000" +::************************************************************** +::主机 +::************************************************************** +::0.0.0.0 -> 所有hosts +::localhost -> 默认配置 +::IP -> 某些IP +set "host=localhost" +::************************************************************** +::控制台GUI +::************************************************************** +::true -> 从控制台解除GUI +::false -> 附加GUI到控制台 +set "noconsole=true" \ No newline at end of file diff --git a/py/Regional/ZH/zconfig/NSCB_options.cmd b/py/Regional/ZH/zconfig/NSCB_options.cmd new file mode 100644 index 00000000..59ce892a --- /dev/null +++ b/py/Regional/ZH/zconfig/NSCB_options.cmd @@ -0,0 +1,184 @@ +::-------------------------------------------------------------- +::为批处理文件设置自定义颜色 +::-------------------------------------------------------------- +color 1F +::-------------------------------------------------------------- +::设置1: 文件夹 +::-------------------------------------------------------------- +::work folder +set "w_folder=NSCB_temp" +::输出文件夹 +set "fold_output=NSCB_output" +::zip压缩文件夹 +set "zip_fold=NSCB_zips" +::-------------------------------------------------------------- +::设置2:程序路径 +::-------------------------------------------------------------- +set "nut=ztools\squirrel.py" +set "xci_lib=ztools\XCI.bat" +set "nsp_lib=ztools\NSP.bat" +set "zip=ztools\squirrel.py" +set "listmanager=ztools\squirrel.py" +set "batconfig=ztools\NSCB_config.bat" +set "batdepend=ztools\install_dependencies.bat" +set "infobat=ztools\info.bat" +::-------------------------------------------------------------- +::设置3:储存选项 +::-------------------------------------------------------------- +::python命令 +set "pycommand=py -3" +::拷贝功能缓存 +::修改字节数以工作得更好 +::32768=32kB ; 65536=64kB +set "buffer=-b 262144" +::带或者不带增量部分的拷贝功能 +::--C_clean -> 复制或者删除titlerights。不忽略增量部分 +::--C_clean_ND-> 复制或者删除titlerights。忽略增量部分 +set "nf_cleaner=--C_clean_ND" +set "skdelta=-ND true" +::解密密钥所需的固件 +::true -> 魔改meta nca中所需系统版本 +::false-> 不魔改meta nca中所需系统版本 +set "patchRSV=-pv false" +set "capRSV=--RSVcap 268435656" +::-------------------------------------------------------------- +::设置4:重要文件 +::-------------------------------------------------------------- +:: +set "uinput=ztools\uinput" +::keys.txt路径 +set "dec_keys=ztools\keys.txt" +::-------------------------------------------------------------- +::设置5:打包选项 +::-------------------------------------------------------------- +::自动模式选择 +::nsp->打包为NSP +::xci-打包为XCI +::both->打包为XCI和NSP +set "vrepack=xci" +::文件夹重打包类型 +::indiv->重打包多个输入文件为多个输出文件。单文件模式 +::multi->重打包多个输入文件为单个输出文件。多文件模式 +set "fi_rep=multi" +::-------------------------------------------------------------- +::设置6:手动模式信息 +::-------------------------------------------------------------- +::在手动模式下首先显示的重新打包模式 +::indiv->单文件打包模式 +::multi->多文件打包模式 +::split->文件拆分模式 +::update->文件更新模式 +::choose->提示选择输入方式 +set "manual_intro=choose" +::-------------------------------------------------------------- +::设置7:zip文件 +::-------------------------------------------------------------- +::还原模式的ZIP压缩文件 +::true->压缩所需文件 +::false->不压缩所需文件 +set "zip_restore=false" + +::-------------------------------------------------------------- +::设置8:最大系统版本 +::-------------------------------------------------------------- +:: 将加密更改为自动模式下的设置密钥生成 +:: 不修改加密 -> vkey = false +:: "1.0.0" -> vkey = 0 +:: "2.0.0 - 2.3.0" -> vkey = 1 +:: "3.0.0" -> vkey = 2 +:: "3.0.1 - 3.0.2" -> vkey = 3 +:: "4.0.0 - 4.1.0" -> vkey = 4 +:: "5.0.0 - 5.1.0" -> vkey = 5 +:: "6.0.0-4 - 6.1.0" -> vkey = 6 +:: "6.2.0" -> vkey = 7 +:: "7.0.0 - 8.01" -> vkey = 8 +:: "8.1.0 " -> vkey = 9 +:: "9.0.0 - 9.0.1 " -> vkey = 10 +:: "9.1.0" -> vkey = 11 +set "vkey=-kp false" + +::-------------------------------------------------------------- +::设置10:自动退出 +::-------------------------------------------------------------- +:: 如果设置为true,程序将在手动模式下自动退出 +set "va_exit=false" + +::-------------------------------------------------------------- +::设置11: 跳过RSV和生成密钥被修改提示 +::-------------------------------------------------------------- +:: 在手动模式下跳过所需的系统版本和密钥生成提示 +set "skipRSVprompt=false" + +::-------------------------------------------------------------- +::设置12:SD卡格式化 +::-------------------------------------------------------------- +:: 选择打包为exFat或Fat32 SD卡存储格式的XCI文件 +::fattype可以是fat32或者exfat +::fexport 将拆分后的nsp打包为files(sxos ROM菜单)或folder(其他安装程序) +set "fatype=-fat exfat" +set "fexport=-fx files" + +::-------------------------------------------------------------- +::设置13:输出文件夹结构 +::-------------------------------------------------------------- +::输出文件夹中的文件组织结构 +::inline -> 所有文件放置在根目录下 +::subfolder -> 文件放到以游戏命名的文件夹下 +set "oforg=inline" + +::-------------------------------------------------------------- +::设置14:新模式/旧模式 +::-------------------------------------------------------------- +::为新模式或旧模式设置程序启动 +::值是new或legacy +set "NSBMODE=new" + +::-------------------------------------------------------------- +::设置15: 罗马,日本和中国的TITLES +::-------------------------------------------------------------- +::romanice ->TRUE +::don't romanize -> FALSE +set "romaji=TRUE" + +::-------------------------------------------------------------- +::设置16: 翻译亚洲地区的NutDB描述 +::-------------------------------------------------------------- +::调用谷歌API +::translate ->TRUE +::don't transnutdb ->FALSE +set "transnutdb=FALSE" + +::-------------------------------------------------------------- +::设置17: 多线程模式 +::-------------------------------------------------------------- +::当前应用于数据库 +set "workers=-threads 1" + +::-------------------------------------------------------------- +::设置18: NSZ格式用户选项 +::-------------------------------------------------------------- +set compression_lv=22 +set compression_threads=0 +set "xci_export=xcz" + +::-------------------------------------------------------------- +::MTP +::-------------------------------------------------------------- +set "MTP=ztools\bin\nscb_mtp.exe" +set "MTP_verification=True" +set "MTP_prioritize_NSZ=True" +set "MTP_exclude_xci_autinst=True" +set "MTP_aut_ch_medium=True" +set "MTP_chk_fw=False" +set "MTP_prepatch_kg=False" +:: 预检查是否已经安装 +set "MTP_prechk_Base=True" +set "MTP_prechk_Upd=False" +:: 转储保存 +set "MTP_saves_Inline=False" +set "MTP_saves_AddTIDandVer=False" +:: 为公共Google驱动器缓存激活TrueCopy或使用符号链接 +set "MTP_pdrive_truecopy=True" +:: 高级安装选项 +set "MTP_stc_installs=False" +set "MTP_ptch_inst_spec=spec1" \ No newline at end of file diff --git a/py/Regional/ZH/zconfig/Server_options.cmd b/py/Regional/ZH/zconfig/Server_options.cmd new file mode 100644 index 00000000..d86112cf --- /dev/null +++ b/py/Regional/ZH/zconfig/Server_options.cmd @@ -0,0 +1,49 @@ +::-------------------------------------------------------------- +::为批处理文件设置自定义颜色 +::-------------------------------------------------------------- +rem color 1F +::-------------------------------------------------------------- +::选项1:程序路径 +::-------------------------------------------------------------- +set "nut=ztools\squirrel.py" +::python命令 +set "pycommand=py -3" +set "pycommandw=pyw -3" +::-------------------------------------------------------------- +::服务器选项 +::-------------------------------------------------------------- +::************************************************************** +::使用GUI最小化启动控制台 yes\no +::************************************************************** +set "start_minimized=yes" +::************************************************************** +::启用视频播放 +::************************************************************** +set "videoplayback=true" +::************************************************************** +::端口 +::************************************************************** +::auto -> 任意打开的端口 +::rg8000 -> 在端口号8000和8999之间任意打开的端口 +::Port number -> 固定的端口(例如8000) +::Auto and rg8000 -> 允许多窗口 +set "port=9001" +::************************************************************** +::主机 +::************************************************************** +::0.0.0.0 -> 所有hosts +::localhost -> 默认配置 +::IP -> 某些IP +set "host=localhost" +::************************************************************** +::控制台GUI +::************************************************************** +::true -> 从控制台解除GUI +::false -> 附加GUI到控制台 +set "noconsole=false" +::************************************************************** +::SSL +::************************************************************** +::true -> 启用https协议,要求SSL证书和密钥 +::false -> 启用http协议 +set "ssl=false" \ No newline at end of file diff --git a/py/Regional/ZH/ztools/ADV.bat b/py/Regional/ZH/ztools/ADV.bat new file mode 100644 index 00000000..a5a326ba --- /dev/null +++ b/py/Regional/ZH/ztools/ADV.bat @@ -0,0 +1,454 @@ +@ECHO OFF +:TOP_INIT +CD /d "%prog_dir%" + +REM ////////////////////////////////////////////////// +REM ///////////////////////////////////////////////// +REM 高级模式 +REM ///////////////////////////////////////////////// +REM //////////////////////////////////////////////// +:normalmode +cls +call :program_logo +echo ------------------------------------------------- +echo 高级选项 +echo ------------------------------------------------- +if exist "advlist.txt" goto prevlist +goto manual_INIT +:prevlist +set conta=0 +for /f "tokens=*" %%f in (advlist.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (advlist.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del advlist.txt ) +endlocal +if not exist "advlist.txt" goto manual_INIT +ECHO ....................................................... +ECHO 发现以前的列表。你想做什么? +:prevlist0 +ECHO ....................................................... +echo 输入"1",从上一个列表自动开始处理 +echo 输入"2",删除列表并创建一个新列表。 +echo 输入"3",继续构建上一个列表 +echo ....................................................... +echo 注意:输入3,您将在开始处理文件之前看到上一个列表, +echo 并且可以从列表中添加和删除项目 +echo. +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="3" goto showlist +if /i "%bs%"=="2" goto delist +if /i "%bs%"=="1" goto start +if /i "%bs%"=="0" exit /B +echo. +echo 错误的选择 +goto prevlist0 +:delist +del advlist.txt +cls +call :program_logo +echo ------------------------------------------------- +echo 高级选项 +echo ------------------------------------------------- +echo .................................. +echo 已经开始一个新的列表 +echo .................................. + +:manual_INIT +endlocal +ECHO *********************************************** +echo 输入"1",将文件夹添加到列表中 +echo 输入"2",将文件添加到列表中 +echo 输入"3",通过本地文件库,将文件添加到列表 +echo 输入"4",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"0",返回模式选择菜单 +ECHO *********************************************** +echo. +%pycommand% "%squirrel%" -t nsp xci nsx nsz xcz -tfile "%prog_dir%advlist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" exit /B +if /i "%eval%"=="1" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%advlist.txt" mode=folder ext="nsp xci nsx nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%advlist.txt" mode=file ext="nsp xci nsx nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%advlist.txt" "extlist=nsp xci nsx nsz xcz" ) +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%advlist.txt" "extlist=nsp xci nsx nsz xcz" ) +goto checkagain +echo. +:checkagain +echo 你想要做什么? +echo ...................................................................... +echo "拖动另一个文件或文件夹并按Enter键将项目添加到列表中" +echo. +echo 输入"1",开始处理 +echo 输入"2",将另一个文件夹添加到列表中 +echo 输入"3",将另一个文件添加到列表中 +echo 输入"4",通过本地文件库,将文件添加到列表 +echo 输入"5",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"e",退出 +echo 输入"i",以查看要处理的文件列表 +echo 输入"r",删除一些文件 (从底部计数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo Or 输入"0"返回模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" -t nsp xci nsx nsz xcz -tfile "%prog_dir%advlist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal + +if /i "%eval%"=="0" exit /B +if /i "%eval%"=="1" goto start +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%advlist.txt" mode=folder ext="nsp xci nsx nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%advlist.txt" mode=file ext="nsp xci nsx nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%advlist.txt" "extlist=nsp xci nsx nsz xcz" ) +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%advlist.txt" "extlist=nsp xci nsx nsz xcz" ) +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto showlist +if /i "%eval%"=="r" goto r_files +if /i "%eval%"=="z" del advlist.txt + +goto checkagain + +:r_files +set /p bs="输入要删除的文件数 (从底部): " +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (advlist.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:update_list1 +if !pos1! GTR !pos2! ( goto :update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :update_list1 +:update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>advlist.txt.new +endlocal +move /y "advlist.txt.new" "advlist.txt" >nul +endlocal + +:showlist +cls +call :program_logo +echo ------------------------------------------------- +echo 高级选项 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (advlist.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (advlist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 你添加了 !conta! 要处理的文件 +echo ................................................. +endlocal + +goto exit /B + +:s_cl_wrongchoice +echo 错误的选择 +echo ............ +:start +echo ******************************************************* +echo 选择如何处理文件 +echo ******************************************************* +echo 输入"1",从NSP或XCI中提取所有文件 +echo 输入"2",进行原始提取(用于NCA产生错误的情况) +echo 输入"3",将所有NCA文件提取为纯文本 +echo 输入"4",从NSP或XCI中提取NCA +echo 输入"5",修补链接帐户要求 +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="1" goto extract +if /i "%bs%"=="2" goto raw_extract +if /i "%bs%"=="3" goto ext_plaintext +if /i "%bs%"=="4" goto ext_fromnca +if /i "%bs%"=="5" goto patch_lnkacc +if %vrepack%=="none" goto s_cl_wrongchoice + + +:extract +cls +call :program_logo +echo ******************************************************** +echo 从NSP或XCI提取所有文件 +echo ******************************************************** +CD /d "%prog_dir%" +for /f "tokens=*" %%f in (advlist.txt) do ( + +%pycommand% "%squirrel%" %buffer% -o "%prog_dir%NSCB_extracted" -tfile "%prog_dir%advlist.txt" -x "" + +%pycommand% "%squirrel%" --strip_lines "%prog_dir%advlist.txt" +call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:raw_extract +cls +call :program_logo +echo ******************************************************** +echo 以原始模式从NSP或XCI中提取所有文件 +echo ******************************************************** +CD /d "%prog_dir%" +for /f "tokens=*" %%f in (advlist.txt) do ( + +%pycommand% "%squirrel%" %buffer% -o "%prog_dir%NSCB_extracted" -tfile "%prog_dir%advlist.txt" -raw_x "" + +%pycommand% "%squirrel%" --strip_lines "%prog_dir%advlist.txt" +call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:ext_plaintext +cls +call :program_logo +echo ******************************************************** +echo 将NSP或XCI中的所有文件提取为纯文本 +echo ******************************************************** +CD /d "%prog_dir%" +for /f "tokens=*" %%f in (advlist.txt) do ( + +%pycommand% "%squirrel%" %buffer% -o "%prog_dir%NSCB_extracted" -tfile "%prog_dir%advlist.txt" -plx "" + +%pycommand% "%squirrel%" --strip_lines "%prog_dir%advlist.txt" +call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:ext_fromnca +cls +call :program_logo +echo ******************************************************** +echo 从NSP或XCI中提取内部NCA文件 +echo ******************************************************** +CD /d "%prog_dir%" +for /f "tokens=*" %%f in (advlist.txt) do ( + +%pycommand% "%squirrel%" %buffer% -o "%prog_dir%NSCB_extracted" -tfile "%prog_dir%advlist.txt" -nfx "" + +%pycommand% "%squirrel%" --strip_lines "%prog_dir%advlist.txt" +call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:patch_lnkacc_wrongchoice +echo 错误的选择 +echo ............ +:patch_lnkacc +echo ******************************************************* +echo 选择如何处理文件 +echo ******************************************************* +echo 输入"1"直接修补原始文件 +echo 输入"2"生成新文件 +echo. +ECHO *********************************************** +echo Or 输入"b",返回上一选项s +ECHO *********************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="b" goto start +if /i "%bs%"=="1" goto patch_lnkacc_mode1 +if /i "%bs%"=="2" goto patch_lnkacc_mode2 +if %vrepack%=="none" goto patch_lnkacc_wrongchoice + +:patch_lnkacc_mode1 +cls +call :program_logo +echo ******************************************************** +echo 修补链接帐户需求 +echo ******************************************************** +CD /d "%prog_dir%" +for /f "tokens=*" %%f in (advlist.txt) do ( + +%pycommand% "%squirrel%" %buffer% -tfile "%prog_dir%advlist.txt" --remlinkacc "" + +%pycommand% "%squirrel%" --strip_lines "%prog_dir%advlist.txt" +call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:patch_lnkacc_mode2 +cls +call :program_logo +echo ******************************************************** +echo 修补链接帐户需求 +echo ******************************************************** +CD /d "%prog_dir%" +for /f "tokens=*" %%f in (advlist.txt) do ( +%pycommand% "%squirrel%" %buffer% %skdelta% --xml_gen "true" -o "%w_folder%" -tfile "%prog_dir%advlist.txt" --rebuild_nsp "" +%pycommand% "%squirrel%" %buffer% -o "%w_folder%" -tfile "%prog_dir%advlist.txt" --xci_trim "" +%pycommand% "%squirrel%" -t nsp xci nsz xcz -tfile "%prog_dir%templist.txt" -ff "%w_folder%" +%pycommand% "%squirrel%" %buffer% -tfile "%prog_dir%templist.txt" --remlinkacc "" + +move "%w_folder%\*.xci" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.xcz" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.nsz" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\%filename%.nsp" ) + +RD /S /Q "%w_folder%" >NUL 2>&1 +echo 完成 +call :thumbup +call :delay +if exist templist.txt del templist.txt + +%pycommand% "%squirrel%" --strip_lines "%prog_dir%advlist.txt" +call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:s_exit_choice +if exist advlist.txt del advlist.txt +if /i "%va_exit%"=="true" echo PROGRAM WILL CLOSE NOW +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto s_exit_choice + +:contador_NF +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (advlist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍有 !conta! 要处理的文件 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + + + +:://///////////////////////////////////////////////// +::子程序 +:://///////////////////////////////////////////////// + +:squirrell +echo ,;:;;, +echo ;;;;; +echo .=', ;:;;:, +echo /_', "=. ';:;:; +echo @=:__, \,;:;:' +echo _(\.= ;:;;' +echo `"_( _/="` +echo `"' +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " BASED ON THE WORK OF BLAWAR AND LUCA FRAGA " +ECHO VERSION 1.00c +ECHO ------------------------------------------------------------------------------------- +ECHO Program's github: https://github.com/julesontheroad/NSC_BUILDER +ECHO Blawar's github: https://github.com/blawar +ECHO Luca Fraga's github: https://github.com/LucaFraga +ECHO ------------------------------------------------------------------------------------- +exit /B + +:delay +PING -n 2 127.0.0.1 >NUL 2>&1 +exit /B + +:thumbup +echo. +echo /@ +echo \ \ +echo ___\ \ +echo (__O) \ +echo (____@) \ +echo (____@) \ +echo (__o)_ \ +echo \ \ +echo. +echo 希望您玩的愉快 +exit /B + + +:salida +exit /B diff --git a/py/Regional/ZH/ztools/DriveMode.bat b/py/Regional/ZH/ztools/DriveMode.bat new file mode 100644 index 00000000..f232c2e6 --- /dev/null +++ b/py/Regional/ZH/ztools/DriveMode.bat @@ -0,0 +1,122 @@ +@ECHO OFF +:TOP_INIT +CD /d "%prog_dir%" +set "bat_name=%~n0" +Title NSC_Builder v1.00c -- Profile: %ofile_name% -- by JulesOnTheRoad + +:MAIN +cls +call :program_logo +ECHO ....................................................... +echo 输入"1",进入下载模式 +echo 输入"2",进入文件信息模式 +echo 输入"0",进入配置选项 +echo. +echo 输入"N",转到新模式 +echo 输入"M",转到MTP模式 +echo 输入"D",转到谷歌网盘模式 +echo 输入"L",转到传统模式 +echo ....................................................... +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="1" goto DOWNLOADMODE +if /i "%bs%"=="2" goto INFMODE +if /i "%bs%"=="N" goto call_main +if /i "%bs%"=="L" goto LegacyMode +if /i "%bs%"=="M" goto MTPMode +if /i "%bs%"=="0" goto OPT_CONFIG +goto MAIN + +:LegacyMode +call "%prog_dir%ztools\LEGACY.bat" +exit /B + +:MTPMode +call "%prog_dir%ztools\MtpMode.bat" +exit /B + +:DOWNLOADMODE +cls +call :program_logo +%pycommand% "%squirrel%" -lib_call Drive.Download Interface +goto MAIN + +:INFMODE +cls +call :program_logo +%pycommand% "%squirrel%" -lib_call Drive.Info Interface +goto MAIN + +:://///////////////////////////////////////////////// +::NSCB_options.cmd 配置脚本 +:://///////////////////////////////////////////////// +:OPT_CONFIG +call "%batconfig%" "%op_file%" "%listmanager%" "%batdepend%" +cls +goto TOP_INIT + +:://///////////////////////////////////////////////// +::子路径 +:://///////////////////////////////////////////////// + +:squirrell +echo ,;:;;, +echo ;;;;; +echo .=', ;:;;:, +echo /_', "=. ';:;:; +echo @=:__, \,;:;:' +echo _(\.= ;:;;' +echo `"_( _/="` +echo `"' +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " BASED ON THE WORK OF BLAWAR AND LUCA FRAGA " +ECHO VERSION 1.00c (GDRIVE) +ECHO ------------------------------------------------------------------------------------- +ECHO Program's github: https://github.com/julesontheroad/NSC_BUILDER +ECHO Blawar's github: https://github.com/blawar +ECHO Luca Fraga's github: https://github.com/LucaFraga +ECHO ------------------------------------------------------------------------------------- +exit /B + +:delay +PING -n 2 127.0.0.1 >NUL 2>&1 +exit /B + +:thumbup +echo. +echo /@ +echo \ \ +echo ___\ \ +echo (__O) \ +echo (____@) \ +echo (____@) \ +echo (__o)_ \ +echo \ \ +echo. +echo 希望您玩的开心 +exit /B + +:call_main +call "%prog_dir%\NSCB.bat" +exit /B + +:salida +::pause +exit diff --git a/py/Regional/ZH/ztools/JOINER.bat b/py/Regional/ZH/ztools/JOINER.bat new file mode 100644 index 00000000..8a363e53 --- /dev/null +++ b/py/Regional/ZH/ztools/JOINER.bat @@ -0,0 +1,308 @@ +@ECHO OFF +:TOP_INIT +CD /d "%prog_dir%" + +REM ////////////////////////////////////////////////// +REM ///////////////////////////////////////////////// +REM 文件合并 +REM ///////////////////////////////////////////////// +REM //////////////////////////////////////////////// +:normalmode +cls +call :program_logo +echo ------------------------------------------------- +echo 文件合并程序已激活 +echo ------------------------------------------------- +if exist "joinlist.txt" goto prevlist +goto manual_INIT +:prevlist +set conta=0 +for /f "tokens=*" %%f in (joinlist.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (joinlist.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del joinlist.txt ) +endlocal +if not exist "joinlist.txt" goto manual_INIT +ECHO ....................................................... +ECHO 发现以前的列表。你想做什么? +:prevlist0 +ECHO ....................................................... +echo 输入"1",从上一个列表自动开始处理 +echo 输入"2",删除列表并创建一个新列表。 +echo 输入"3",继续构建上一个列表 +echo ....................................................... +echo 注意:输入3,您将在开始处理文件之前看到上一个列表, +echo 并且可以从列表中添加和删除项目 +echo. +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="3" goto showlist +if /i "%bs%"=="2" goto delist +if /i "%bs%"=="1" goto start +if /i "%bs%"=="0" exit /B +echo. +echo 错误的选择 +goto prevlist0 +:delist +del joinlist.txt +cls +call :program_logo +echo ------------------------------------------------- +echo 文件合并程序已激活 +echo ------------------------------------------------- +echo .................................. +echo 已经开始一个新的列表 +echo .................................. + +:manual_INIT +endlocal +ECHO *********************************************** +echo 输入"1",将文件夹添加到列表中 +echo 输入"2",将文件添加到列表中 +echo 输入"3",通过本地文件库,将文件添加到列表 +echo 输入"4",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"0",返回模式选择菜单 +ECHO *********************************************** +echo. +%pycommand% "%squirrel%" -t ns0 xc0 00 -tfile "%prog_dir%joinlist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" exit /B +if /i "%eval%"=="1" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%joinlist.txt" mode=folder ext="ns0 xc0 00" ) 2>&1>NUL +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%joinlist.txt" mode=file ext="ns0 xc0 00" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%joinlist.txt" "extlist=ns0 xc0 00" ) +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%joinlist.txt" "extlist=ns0 xc0 00" ) +goto checkagain +echo. +:checkagain +echo 你想要做什么?? +echo ...................................................................... +echo "拖动另一个文件或文件夹并按回车键将项目添加到列表中" +echo. +echo 输入"1",开始处理 +echo 输入"2",将另一个文件夹添加到列表中 +echo 输入"3",将另一个文件添加到列表中 +echo 输入"4",通过本地文件库,将文件添加到列表 +echo 输入"5",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"e",退出 +echo 输入"i",以查看要处理的文件列表 +echo 输入"r",删除一些文件 (从底部计数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" -t ns0 xc0 00 -tfile "%prog_dir%joinlist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal + +if /i "%eval%"=="0" exit /B +if /i "%eval%"=="1" goto start +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%joinlist.txt" mode=folder ext="ns0 xc0 00" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%joinlist.txt" mode=file ext="ns0 xc0 00" ) 2>&1>NUL +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%joinlist.txt" "extlist=ns0 xc0 00" ) +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%joinlist.txt" "extlist=ns0 xc0 00" ) +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto showlist +if /i "%eval%"=="r" goto r_files +if /i "%eval%"=="z" del joinlist.txt + +goto checkagain + +:r_files +set /p bs="输入要删除的文件数 (从底部): " +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (joinlist.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:update_list1 +if !pos1! GTR !pos2! ( goto :update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :update_list1 +:update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>joinlist.txt.new +endlocal +move /y "joinlist.txt.new" "joinlist.txt" >nul +endlocal + +:showlist +cls +call :program_logo +echo ------------------------------------------------- +echo 文件合并程序已激活 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (joinlist.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (joinlist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 你添加了 !conta! 要处理的文件 +echo ................................................. +endlocal + +goto checkagain + +:s_cl_wrongchoice +echo 错误的选择 +echo ............ +:start +echo ******************************************************* +echo 选择如何处理文件 +echo ******************************************************* +echo 输入"1",来加入.xc*,.ns*,.0*文件 +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="1" goto joinfiles +if %vrepack%=="none" goto s_cl_wrongchoice + +:joinfiles +cls +call :program_logo +CD /d "%prog_dir%" +for /f "tokens=*" %%f in (joinlist.txt) do ( + +%pycommand% "%squirrel%" %buffer% -o "%fold_output%" -tfile "%prog_dir%joinlist.txt" --joinfile "" +if exist "%fold_output%\output.nsp" ( %pycommand% "%squirrel%" -t nsp -renf "%fold_output%\output.nsp" >NUL 2>&1) +if exist "%fold_output%\output.xci" ( %pycommand% "%squirrel%" -t xci -renf "%fold_output%\output.xci" >NUL 2>&1) + +%pycommand% "%squirrel%" --strip_lines "%prog_dir%joinlist.txt" +call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:s_exit_choice +if exist joinlist.txt del joinlist.txt +if /i "%va_exit%"=="true" echo PROGRAM WILL CLOSE NOW +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto s_exit_choice + +:contador_NF +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (joinlist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍有 !conta! 要处理的文件 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + + +:://///////////////////////////////////////////////// +::子程序 +:://///////////////////////////////////////////////// + +:squirrell +echo ,;:;;, +echo ;;;;; +echo .=', ;:;;:, +echo /_', "=. ';:;:; +echo @=:__, \,;:;:' +echo _(\.= ;:;;' +echo `"_( _/="` +echo `"' +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " BASED ON THE WORK OF BLAWAR AND LUCA FRAGA " +ECHO VERSION 1.00c +ECHO ------------------------------------------------------------------------------------- +ECHO Program's github: https://github.com/julesontheroad/NSC_BUILDER +ECHO Blawar's github: https://github.com/blawar +ECHO Luca Fraga's github: https://github.com/LucaFraga +ECHO ------------------------------------------------------------------------------------- +exit /B + +:delay +PING -n 2 127.0.0.1 >NUL 2>&1 +exit /B + +:thumbup +echo. +echo /@ +echo \ \ +echo ___\ \ +echo (__O) \ +echo (____@) \ +echo (____@) \ +echo (__o)_ \ +echo \ \ +echo. +echo 希望您玩的开心 +exit /B + + +:salida +exit /B diff --git a/py/Regional/ZH/ztools/LEGACY.bat b/py/Regional/ZH/ztools/LEGACY.bat new file mode 100644 index 00000000..5f893752 --- /dev/null +++ b/py/Regional/ZH/ztools/LEGACY.bat @@ -0,0 +1,2432 @@ +@ECHO OFF +:TOP_INIT +CD /d "%prog_dir%" +set "bat_name=%~n0" +Title NSC_Builder v1.00c -- Profile: %ofile_name% -- by JulesOnTheRoad + +::Check if user is dragging a folder or a file +if "%~1"=="" goto manual +dir "%~1\" >nul 2>nul +if not errorlevel 1 goto folder +if exist "%~1\" goto folder +goto file + +:folder +if "%fi_rep%" EQU "multi" goto folder_mult_mode +goto folder_ind_mode + +::AUTO MODE. INDIVIDUAL REPACK PROCESSING OPTION. +:folder_ind_mode +call :program_logo +echo -------------------------------------- +echo 自动模式。单文件打包已设置 +echo -------------------------------------- +echo. +::************* +::NSP文件 +::************* +for /r "%~1" %%f in (*.nsp) do ( +set "target=%%f" +if exist "%w_folder%" RD /s /q "%w_folder%" >NUL 2>&1 + +MD "%w_folder%" +MD "%w_folder%\secure" + +set "filename=%%~nf" +set "orinput=%%f" +set "showname=%orinput%" +call :processing_message +REM echo %safe_var%>safe.txt +call :squirrell +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%%f" +if "%zip_restore%" EQU "true" ( set "ziptarget=%%f" ) +if "%zip_restore%" EQU "true" ( call :makezip ) +call :getname +REM setlocal enabledelayedexpansion +REM set vpack=!vrepack! +REM endlocal & ( set "vpack=!vrepack!" ) + +REM if "%trn_skip%" EQU "true" ( call :check_titlerights ) +if "%vrename%" EQU "true" ( call :addtags_from_nsp ) + +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) +setlocal enabledelayedexpansion +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +set "gefolder=%fold_output%\!end_folder!" +if "%oforg%" EQU "inline" ( set "gefolder=%fold_output%" ) +MD "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xci" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%gefolder%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%gefolder%\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +echo DONE +call :thumbup +) + +::XCI文件 +for /r "%~1" %%f in (*.xci) do ( +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +set "filename=%%~nf" +set "orinput=%%f" +set "showname=%orinput%" +call :processing_message +MD "%w_folder%" +MD "%w_folder%\secure" +call :getname +echo ------------------------------------- +echo 从XCI提取安全分区 +echo ------------------------------------- +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%%f" +echo DONE +if "%vrename%" EQU "true" ( call :addtags_from_xci ) +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) +setlocal enabledelayedexpansion +MD "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.xci" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%\!end_folder!" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\!end_folder!\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +echo DONE +call :thumbup +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto aut_exit_choice + +::AUTO MODE. MULTIREPACK PROCESSING OPTION. +:folder_mult_mode +call :program_logo +echo -------------------------------------- +echo 自动模式。多文件处理已设置 +echo -------------------------------------- +echo. +set "filename=%~n1" +set "orinput=%~f1" +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" +MD "%w_folder%\secure" +set "end_folder=%filename%" +set "filename=%filename%[multi]" +::NSP文件 +for /r "%~1" %%f in (*.nsp) do ( +set "showname=%orinput%" +call :processing_message +::echo %safe_var%>safe.txt +call :squirrell +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%%f" +if "%zip_restore%" EQU "true" ( set "ziptarget=%%f" ) +if "%zip_restore%" EQU "true" ( call :makezip ) +) + +::XCI文件 +for /r "%~1" %%f in (*.xci) do ( +echo ------------------------------------ +echo 从XCI提取安全分区 +echo ------------------------------------ +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%%f" +echo DONE +) +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) +setlocal enabledelayedexpansion +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +set "gefolder=%fold_output%\!end_folder!" +if "%oforg%" EQU "inline" ( set "gefolder=%fold_output%" ) +MD "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xci" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%gefolder%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%gefolder%\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +echo DONE +call :thumbup +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto aut_exit_choice + +:file +call :program_logo +if "%~x1"==".nsp" ( goto nsp ) +if "%~x1"==".xci" ( goto xci ) +if "%~x1"==".*" ( goto other ) +:other +echo 未拖动有效文件。程序只接受XCI或NSP文件。 +echo 您将被重定向到手动模式。 +pause +goto manual + +:nsp +set "orinput=%~f1" +set "filename=%~n1" +set "target=%~1" +set "showname=%orinput%" +call :processing_message +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +call :squirrell +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%~1" +if "%zip_restore%" EQU "true" ( set "ziptarget=%~1" ) +if "%zip_restore%" EQU "true" ( call :makezip ) +call :getname +if "%vrename%" EQU "true" call :addtags_from_nsp +::echo "%vrepack%" +::echo "%nsp_lib%" +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) +setlocal enabledelayedexpansion +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +set "gefolder=%fold_output%\!end_folder!" +if "%oforg%" EQU "inline" ( set "gefolder=%fold_output%" ) +MD "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xci" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%gefolder%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%gefolder%\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +echo DONE +call :thumbup +goto aut_exit_choice + +:xci +set "filename=%~n1" +set "orinput=%~f1" +set "showname=%orinput%" +call :processing_message +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" +MD "%w_folder%\secure" +call :getname +echo ------------------------------------ +echo 从XCI提取安全分区 +echo ------------------------------------ +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%~1" +echo DONE +if "%vrename%" EQU "true" call :addtags_from_xci +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) +setlocal enabledelayedexpansion +if exist "%fold_output%\!end_folder!" RD /S /Q "%fold_output%\!end_folder!" >NUL 2>&1 +MD "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.xci" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%\!end_folder!" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\!end_folder!\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +echo DONE +call :thumbup +goto aut_exit_choice +:aut_exit_choice +if /i "%va_exit%"=="true" echo 程序将立即关闭 +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",进入模式选择 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto aut_exit_choice +exit +:manual +endlocal +cls +call :program_logo +echo ******************************** +echo 您已进入手动模式 +echo ******************************** +if "%manual_intro%" EQU "indiv" ( goto normalmode ) +if "%manual_intro%" EQU "multi" ( goto multimode ) +if "%manual_intro%" EQU "split" ( goto SPLMODE ) +if "%manual_intro%" EQU "update" ( goto UPDMODE ) + +goto manual_Reentry + +:manual_Reentry +cls +call :program_logo +ECHO ....................................................... +echo 输入"1",单文件处理 (legacy) +echo 输入"2",多文件处理 (legacy) +echo 输入"3",拆分模式 (legacy) +echo 输入"4",更新模式 (legacy) +echo 输入"5",文件信息 +echo 输入"6",数据构建 +echo 输入"0",配置选项 +echo. +echo 输入"N",进入新模式 +echo 输入"M",进入MTP模式 +echo 输入"D",进入谷歌网盘模式 +echo 输入"L",进入传统模式 +echo ....................................................... +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="1" goto normalmode +if /i "%bs%"=="2" goto multimode +if /i "%bs%"=="3" goto SPLMODE +if /i "%bs%"=="4" goto UPDMODE +if /i "%bs%"=="5" goto INFMODE +if /i "%bs%"=="6" goto DBMODE +if /i "%bs%"=="0" goto OPT_CONFIG +if /i "%bs%"=="N" goto call_new +if /i "%bs%"=="D" goto GDMode +if /i "%bs%"=="M" goto MTPMode +goto manual_Reentry + +:MTPMode +call "%prog_dir%ztools\MtpMode.bat" +exit /B + +:GDMode +call "%prog_dir%ztools\DriveMode.bat" +exit /B + +REM ////////////////////////////////////////////////// +REM ///////////////////////////////////////////////// +REM START OF MANUAL MODE. INDIVIDUAL PROCESSING +REM ///////////////////////////////////////////////// +REM //////////////////////////////////////////////// +:normalmode +cls +call :program_logo +echo ----------------------------------------------- +echo 单文件处理已激活 +echo ----------------------------------------------- +if exist "list.txt" goto prevlist +goto manual_INIT +:prevlist +set conta=0 +for /f "tokens=*" %%f in (list.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (list.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del list.txt ) +endlocal +if not exist "list.txt" goto manual_INIT +ECHO ....................................................... +ECHO 发现了以前的列表, 你想做什么? +:prevlist0 +ECHO ....................................................... +echo 输入"1",从上一列表自动开始处理 +echo 输入"2",删除列表并创建新列表. +echo 输入"3",继续构建上一个列表 +echo ....................................................... +echo NOTE: By pressing 3 you'll see the previous list +echo before starting the processing the files and you will +echo be able to add and delete items from the list +echo. +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="3" goto showlist +if /i "%bs%"=="2" goto delist +if /i "%bs%"=="1" goto start_cleaning +if /i "%bs%"=="0" goto manual_Reentry +echo. +echo BAD CHOICE +goto prevlist0 +:delist +del list.txt +cls +call :program_logo +echo ----------------------------------------------- +echo 单文件处理已激活 +echo ----------------------------------------------- +echo .................................. +echo 你已经开始一个新的列表 +echo .................................. +:manual_INIT +endlocal +ECHO *********************************************** +echo 输入"0"返回模式选择菜单 +ECHO *********************************************** +echo. +set /p bs="请将文件或文件夹拖到窗口上,然后按回车键: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +dir "%bs%\" >nul 2>nul +if not errorlevel 1 goto checkfolder +if exist "%bs%\" goto checkfolder +goto checkfile +:checkfolder +DIR /B /S "%bs%\*.ns*">hlist.txt +FINDSTR /L ".nsp" hlist.txt>>list.txt +FINDSTR /L ".nsx" hlist.txt>>list.txt +del hlist.txt +DIR /B /S "%bs%\*.xci">hlist2.txt +FINDSTR /L ".xci" hlist2.txt>>list.txt +del hlist2.txt +goto checkagain +:checkfile +echo %bs%>>hlist.txt +FINDSTR /L ".nsp" hlist.txt>>list.txt +FINDSTR /L ".nsx" hlist.txt>>list.txt +del hlist.txt +echo %bs%>>hlist2.txt +FINDSTR /L ".xci" hlist2.txt>>list.txt +del hlist2.txt +goto checkagain +echo. +:checkagain +echo 你想做什么? +echo ...................................................................... +echo "拖动另一个文件或文件夹,然后按回车键将项目添加到列表中" +echo. +echo 输入"1",开始处理 +echo 输入"e",退出 +echo 输入"i",查看要处理的文件列表 +echo 输入"r",删除一些文件(从底部开始计数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="拖放文件/文件夹或设置选项: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto start_cleaning +if /i "%bs%"=="e" goto salida +if /i "%bs%"=="i" goto showlist +if /i "%bs%"=="r" goto r_files +if /i "%bs%"=="z" del list.txt +dir "%bs%\" >nul 2>nul +if not errorlevel 1 goto checkfolder +if exist "%bs%\" goto checkfolder +goto checkfile +goto salida + +:r_files +set /p bs="输入要删除的文件数(从底部开始): " +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (list.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:update_list1 +if !pos1! GTR !pos2! ( goto :update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :update_list1 +:update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>list.txt.new +endlocal +move /y "list.txt.new" "list.txt" >nul +endlocal + +:showlist +cls +call :program_logo +echo ------------------------------------------------- +echo 单文件处理已激活 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (list.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (list.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 你加了 !conta! 个要处理的文件 +echo ................................................. +endlocal + +goto checkagain + +:s_cl_wrongchoice +echo 错误的选择 +echo ............ +:start_cleaning +echo ******************************************************* +echo 接下来选择您要执行的操作 +echo ******************************************************* +echo 输入"1",重新打包为NSP +echo 输入"2",重新打包为XCI +echo 输入"3",全部都要 +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="0" set "vrepack=zip" +if /i "%bs%"=="1" set "vrepack=nsp" +if /i "%bs%"=="2" set "vrepack=xci" +if /i "%bs%"=="3" set "vrepack=both" +if /i "%bs%"=="0" goto s_KeyChange_skip +if %vrepack%=="none" goto s_cl_wrongchoice +:s_RSV_wrongchoice +if /i "%skipRSVprompt%"=="true" set "patchRSV=-pv false" +if /i "%skipRSVprompt%"=="true" goto s_KeyChange_skip +if /i "%vrepack%"=="zip" goto s_KeyChange_skip +echo ******************************************************* +echo 是否要魔改所需的系统版本 +echo ******************************************************* +echo If you choose to patch it will be set to match the +echo nca crypto so it'll only ask to update your system +echo in the case it's necessary +echo. +echo 输入"0",不魔改 +echo 输入"1",魔改 +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set "patchRSV=none" +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="0" set "patchRSV=-pv false" +if /i "%bs%"=="1" set "patchRSV=-pv true" +if /i "%patchRSV%"=="none" echo 错误的选择 +if /i "%patchRSV%"=="none" goto s_RSV_wrongchoice +if /i "%bs%"=="0" goto s_KeyChange_skip + +:s_KeyChange_wrongchoice +echo ******************************************************* +echo 设置魔改系统最大版本号 +echo ******************************************************* +echo Depending on your choice keygeneration and RSV will be +echo lowered to the corresponding keygeneration range in case +echo read keygeneration value is bigger than the one specified +echo in the program. +echo 这并不总能降低系统要求。 +echo. +echo 输入"f",不魔改 +echo 输入"0",魔改版本FW 1.0 +echo 输入"1",魔改版本FW 2.0-2.3 +echo 输入"2",魔改版本FW 3.0 +echo 输入"3",魔改版本FW 3.0.1-3.0.2 +echo 输入"4",魔改版本FW 4.0.0-4.1.0 +echo 输入"5",魔改版本FW 5.0.0-5.1.0 +echo 输入"6",魔改版本FW 6.0.0-6.1.0 +echo 输入"7",魔改版本FW 6.2.0 +echo 输入"8",魔改版本FW 7.0.0-8.0.1 +echo 输入"9",魔改版本FW 8.1.0 +echo 输入"10",魔改版本FW 9.0.0-9.0.1) +echo 输入"11",魔改版本FW 9.1.0 +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set "vkey=none" +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="f" set "vkey=-kp false" +if /i "%bs%"=="0" set "vkey=-kp 0" +if /i "%bs%"=="0" set "capRSV=--RSVcap 0" +if /i "%bs%"=="1" set "vkey=-kp 1" +if /i "%bs%"=="1" set "capRSV=--RSVcap 65796" +if /i "%bs%"=="2" set "vkey=-kp 2" +if /i "%bs%"=="2" set "capRSV=--RSVcap 201327002" +if /i "%bs%"=="3" set "vkey=-kp 3" +if /i "%bs%"=="3" set "capRSV=--RSVcap 201392178" +if /i "%bs%"=="4" set "vkey=-kp 4" +if /i "%bs%"=="4" set "capRSV=--RSVcap 268435656" +if /i "%bs%"=="5" set "vkey=-kp 5" +if /i "%bs%"=="5" set "capRSV=--RSVcap 335544750" +if /i "%bs%"=="6" set "vkey=-kp 6" +if /i "%bs%"=="6" set "capRSV=--RSVcap 402653494" +if /i "%bs%"=="7" set "vkey=-kp 7" +if /i "%bs%"=="7" set "capRSV=--RSVcap 404750336" +if /i "%bs%"=="8" set "vkey=-kp 8" +if /i "%bs%"=="8" set "capRSV=--RSVcap 469762048" +if /i "%bs%"=="9" set "vkey=-kp 9" +if /i "%bs%"=="9" set "capRSV=--RSVcap 537919488" +if /i "%bs%"=="10" set "vkey=-kp 10" +if /i "%bs%"=="10" set "capRSV=--RSVcap 603979776" +if /i "%bs%"=="11" set "vkey=-kp 11" +if /i "%bs%"=="11" set "capRSV=--RSVcap 605028352" +if /i "%vkey%"=="none" echo 错误的选择 +if /i "%vkey%"=="none" goto s_KeyChange_wrongchoice + +:s_KeyChange_skip +cls +call :program_logo +for /f "tokens=*" %%f in (list.txt) do ( +set "name=%%~nf" +set "filename=%%~nxf" +set "orinput=%%f" +set "ziptarget=%%f" + +if "%vrepack%" EQU "zip" ( set "zip_restore=true" ) +if "%%~nxf"=="%%~nf.nsp" call :nsp_manual +if "%%~nxf"=="%%~nf.xci" call :xci_manual +%pycommand% "%squirrel%" --strip_lines "%prog_dir%list.txt" +call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +:s_exit_choice +if exist list.txt del list.txt +if /i "%va_exit%"=="true" echo 程序将立即关闭 +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择菜单 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto s_exit_choice + +:nsp_manual +set "filename=%name%" +set "showname=%orinput%" +call :processing_message + +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +call :squirrell + +if "%vrepack%" EQU "zip" ( goto nsp_just_zip ) + +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%orinput%" + +:nsp_just_zip +if "%zip_restore%" EQU "true" ( call :makezip ) +call :getname +if "%vrename%" EQU "true" call :addtags_from_nsp +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "repack" "%w_folder%" "%%f") +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" "%%f") +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "repack" "%w_folder%" "%%f") +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" "%%f") +setlocal enabledelayedexpansion +if "%zip_restore%" EQU "true" ( goto :nsp_just_zip2 ) +if exist "%fold_output%\!end_folder!" RD /S /Q "%fold_output%\!end_folder!" >NUL 2>&1 +:nsp_just_zip2 +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +set "gefolder=%fold_output%\!end_folder!" +if "%oforg%" EQU "inline" ( set "gefolder=%fold_output%" ) +MD "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xci" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%gefolder%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%gefolder%\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +echo DONE +call :thumbup +call :delay + +:end_nsp_manual +exit /B + +:xci_manual +::XCI文件 +cls +if "%vrepack%" EQU "zip" ( goto end_xci_manual ) +set "filename=%name%" +call :program_logo +set "showname=%orinput%" +call :processing_message +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" +MD "%w_folder%\secure" +call :getname +echo ------------------------------------ +echo 从XCI提取安全分区 +echo ------------------------------------ +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%orinput%" +echo DONE +if "%vrename%" EQU "true" call :addtags_from_xci +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) +setlocal enabledelayedexpansion +if exist "%fold_output%\!end_folder!" RD /S /Q "%fold_output%\!end_folder!" >NUL 2>&1 +MD "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.xci" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%\!end_folder!" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\!end_folder!\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +echo DONE +call :thumbup +call :delay +:end_xci_manual +exit /B + +:contador_NF +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (list.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍然有 !conta! 个要处理的文件 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// +:: MULTI-MODE +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// + +:multimode +if exist %w_folder% RD /S /Q "%w_folder%" >NUL 2>&1 +cls +call :program_logo +echo ----------------------------------------------- +echo 多文件处理已激活 +echo ----------------------------------------------- +if exist "mlist.txt" goto multi_prevlist +goto multi_manual_INIT +:multi_prevlist +set conta=0 +for /f "tokens=*" %%f in (mlist.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (mlist.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del mlist.txt ) +endlocal +if not exist "mlist.txt" goto multi_manual_INIT +ECHO ....................................................... +ECHO 发现了以前的列表, 你想做什么? +:multi_prevlist0 +ECHO ....................................................... +echo 输入"1",从上一列表自动开始处理 +echo 输入"2",删除列表并创建新列表. +echo 输入"3",继续构建上一个列表 +echo ....................................................... +echo NOTE: By pressing 3 you'll see the previous list +echo before starting the processing the files and you will +echo be able to add and delete items from the list +echo. +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="3" goto multi_showlist +if /i "%bs%"=="2" goto multi_delist +if /i "%bs%"=="1" goto multi_start_cleaning +if /i "%bs%"=="0" goto manual_Reentry +echo. +echo BAD CHOICE +goto multi_prevlist0 +:multi_delist +del mlist.txt +cls +call :program_logo +echo ----------------------------------------------- +echo 多文件处理已激活 +echo ----------------------------------------------- +echo .................................. +echo 你已经开始一个新的列表 +echo .................................. +:multi_manual_INIT +endlocal +ECHO *********************************************** +echo 输入"0",返回模式选择菜单 +ECHO *********************************************** +echo. +set /p bs="请将文件或文件夹拖到窗口上,然后按回车键: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +dir "%bs%\" >nul 2>nul +if not errorlevel 1 goto multi_checkfolder +if exist "%bs%\" goto multi_checkfolder +goto multi_checkfile +:multi_checkfolder +DIR /B /S "%bs%\*.nsp">hmlist.txt +FINDSTR /L ".nsp" hmlist.txt>>mlist.txt +del hmlist.txt +DIR /B /S "%bs%\*.xci">hmlist2.txt +FINDSTR /L ".xci" hmlist2.txt>>mlist.txt +del hmlist2.txt +goto multi_checkagain +:multi_checkfile +echo %bs%>>hmlist.txt +FINDSTR /L ".nsp" hmlist.txt>>mlist.txt +del hmlist.txt +echo %bs%>>hmlist2.txt +FINDSTR /L ".xci" hmlist2.txt>>mlist.txt +del hmlist2.txt +goto multi_checkagain +echo. +:multi_checkagain +echo 你想做什么? +echo ...................................................................... +echo "拖动另一个文件或文件夹,然后按回车键将项目添加到列表中" +echo. +echo 输入"1",开始处理 +echo 输入"2",从NSP或NCA中提取并设置自定义图标 +echo 输入"e",退出 +echo 输入"i",查看要处理的文件列表 +echo 输入"r",删除一些文件(从底部开始计数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="拖放文件/文件夹或设置选项: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto multi_start_cleaning +if /i "%bs%"=="2" goto multi_set_clogo +if /i "%bs%"=="e" goto salida +if /i "%bs%"=="i" goto multi_showlist +if /i "%bs%"=="r" goto multi_r_files +if /i "%bs%"=="z" del mlist.txt +dir "%bs%\" >nul 2>nul +if not errorlevel 1 goto multi_checkfolder +if exist "%bs%\" goto multi_checkfolder +goto multi_checkfile +goto salida + +:multi_r_files +set /p bs="输入要删除的文件数(从底部开始): " +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (mlist.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:multi_update_list1 +if !pos1! GTR !pos2! ( goto :multi_update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :multi_update_list1 +:multi_update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>mlist.txt.new +endlocal +move /y "mlist.txt.new" "mlist.txt" >nul +endlocal + +:multi_showlist +cls +call :program_logo +echo ------------------------------------------------- +echo 多文件处理已激活 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (mlist.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (mlist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 你加了 !conta! 个要处理的文件 +echo ................................................. +endlocal + +goto multi_checkagain + +:m_cl_wrongchoice +echo 错误的选择 +echo ............ +:multi_start_cleaning +echo ******************************************************* +echo 接下来选择您要执行的操作 +echo ******************************************************* +echo 输入"1",重新打包为NSP +echo 输入"2",重新打包为xci +echo 输入"3",打包为NSP和XCI +echo. +ECHO ***************************************** +echo 或输入"b",返回选项列表 +ECHO ***************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="b" goto multi_checkagain +if /i "%bs%"=="1" set "vrepack=nsp" +if /i "%bs%"=="2" set "vrepack=xci" +if /i "%bs%"=="3" set "vrepack=both" +if %vrepack%=="none" goto m_cl_wrongchoice +:m_RSV_wrongchoice +if /i "%skipRSVprompt%"=="true" set "patchRSV=-pv false" +if /i "%skipRSVprompt%"=="true" goto m_KeyChange_skip +echo ******************************************************* +echo 是否要魔改所需的系统版本 +echo ******************************************************* +echo If you choose to patch it will be set to match the +echo nca crypto so it'll only ask to update your system +echo in the case it's necessary +echo. +echo 输入"0",不魔改 +echo 输入"1",魔改 +echo. +ECHO ***************************************** +echo 或输入"b",返回选项列表 +ECHO ***************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set patchRSV=none +if /i "%bs%"=="b" goto multi_checkagain +if /i "%bs%"=="0" set "patchRSV=-pv false" +if /i "%bs%"=="1" set "patchRSV=-pv true" +if /i "%patchRSV%"=="none" echo 错误的选择 +if /i "%patchRSV%"=="none" goto m_RSV_wrongchoice +if /i "%bs%"=="0" goto m_KeyChange_skip + +:m_KeyChange_wrongchoice +echo ******************************************************* +echo 设置魔改允许的最大版本号 +echo ******************************************************* +echo Depending on your choice keygeneration and RSV will be +echo lowered to the corresponding keygeneration range in case +echo read keygeneration value is bigger than the one specified +echo in the program. +echo 这并不总能降低系统要求。 +echo. +echo 输入"f",不魔改 +echo 输入"0",魔改版本FW 1.0 +echo 输入"1",魔改版本FW 2.0-2.3 +echo 输入"2",魔改版本FW 3.0 +echo 输入"3",魔改版本FW 3.0.1-3.0.2 +echo 输入"4",魔改版本FW 4.0.0-4.1.0 +echo 输入"5",魔改版本FW 5.0.0-5.1.0 +echo 输入"6",魔改版本FW 6.0.0-6.1.0 +echo 输入"7",魔改版本FW 6.2.0 +echo 输入"8",魔改版本FW 7.0.0-8.0.1 +echo 输入"9",魔改版本FW 8.1.0 +echo 输入"10",魔改版本FW 9.0.0-9.0.1 +echo 输入"11",魔改版本FW 9.1.0 +echo. +ECHO ***************************************** +echo 或输入"b",返回选项列表 +ECHO ***************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set "vkey=none" +if /i "%bs%"=="b" goto multi_checkagain +if /i "%bs%"=="f" set "vkey=-kp false" +if /i "%bs%"=="0" set "vkey=-kp 0" +if /i "%bs%"=="0" set "capRSV=--RSVcap 0" +if /i "%bs%"=="1" set "vkey=-kp 1" +if /i "%bs%"=="1" set "capRSV=--RSVcap 65796" +if /i "%bs%"=="2" set "vkey=-kp 2" +if /i "%bs%"=="2" set "capRSV=--RSVcap 201327002" +if /i "%bs%"=="3" set "vkey=-kp 3" +if /i "%bs%"=="3" set "capRSV=--RSVcap 201392178" +if /i "%bs%"=="4" set "vkey=-kp 4" +if /i "%bs%"=="4" set "capRSV=--RSVcap 268435656" +if /i "%bs%"=="5" set "vkey=-kp 5" +if /i "%bs%"=="5" set "capRSV=--RSVcap 335544750" +if /i "%bs%"=="6" set "vkey=-kp 6" +if /i "%bs%"=="6" set "capRSV=--RSVcap 402653494" +if /i "%bs%"=="7" set "vkey=-kp 7" +if /i "%bs%"=="7" set "capRSV=--RSVcap 404750336" +if /i "%bs%"=="8" set "vkey=-kp 8" +if /i "%bs%"=="8" set "capRSV=--RSVcap 469762048" +if /i "%bs%"=="9" set "vkey=-kp 9" +if /i "%bs%"=="9" set "capRSV=--RSVcap 537919488" +if /i "%bs%"=="10" set "vkey=-kp 10" +if /i "%bs%"=="10" set "capRSV=--RSVcap 603979776" +if /i "%bs%"=="11" set "vkey=-kp 11" +if /i "%bs%"=="11" set "capRSV=--RSVcap 605028352" +if /i "%vkey%"=="none" echo 错误的选择 +if /i "%vkey%"=="none" goto m_KeyChange_wrongchoice + +:m_KeyChange_skip +echo ******************************************************* +echo 最终文件名 +echo ******************************************************* +echo. +echo 或输入"b",返回选项列表 +echo. +set /p bs="请键入不带扩展名的名称: " +set finalname=%bs:"=% +if /i "%finalname%"=="b" goto multi_checkagain + +cls +call :program_logo +for /f "tokens=*" %%f in (mlist.txt) do ( +set "name=%%~nf" +set "filename=%%~nxf" +set "orinput=%%f" +if "%%~nxf"=="%%~nf.nsp" call :multi_nsp_manual +if "%%~nxf"=="%%~nf.xci" call :multi_xci_manual +%pycommand% "%squirrel%" --strip_lines "%prog_dir%mlist.txt" +call :multi_contador_NF +) +set "filename=%finalname%" +set "end_folder=%finalname%" +set "filename=%finalname%[multi]" +::pause +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) + +setlocal enabledelayedexpansion +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +set "gefolder=%fold_output%\!end_folder!" +if "%oforg%" EQU "inline" ( set "gefolder=%fold_output%" ) +MD "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xci" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%gefolder%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%gefolder%\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +:m_exit_choice +if exist mlist.txt del mlist.txt +if /i "%va_exit%"=="true" echo 程序将立即关闭 +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择菜单 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto m_exit_choice + + +:multi_nsp_manual +set "showname=%orinput%" +call :processing_message +call :squirrell +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%orinput%" +if "%zip_restore%" EQU "true" ( set "ziptarget=%orinput%" ) +if "%zip_restore%" EQU "true" ( call :makezip ) +echo DONE +call :thumbup +call :delay +exit /B + +:multi_xci_manual +::XCI文件 +set "showname=%orinput%" +call :processing_message +MD "%w_folder%" >NUL 2>&1 +MD "%w_folder%\secure" >NUL 2>&1 +MD "%w_folder%\normal" >NUL 2>&1 +MD "%w_folder%\update" >NUL 2>&1 +call :getname +echo ------------------------------------ +echo 从XCI提取安全分区 +echo ------------------------------------ +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" %nf_cleaner% "%orinput%" +echo DONE +call :thumbup +call :delay +exit /B + +:multi_contador_NF +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (mlist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍然有 !conta! 个要处理的文件 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + + +:multi_set_clogo +cls +call :program_logo +echo ------------------------------------------ +echo 自定义图标 +echo ------------------------------------------ +echo Indicated for multi-game xci. +echo Currently custom logos and names are set dragging a nsp or control nca +echo That way the program will copy the control nca in the normal partition +echo If you don't add a custom logo the logo will be set from one of your games +echo .......................................... +echo 输入"b",返回列表生成器 +echo .......................................... +set /p bs="将NSP或NCA文件拖到窗口上,然后按回车键: " +set bs=%bs:"=% +if /i "%bs%"=="b" ( goto multi_checkagain ) +if exist "%bs%" ( goto multi_checklogo ) +goto multi_set_clogo + +:multi_checklogo +if exist "%prog_dir%logo.txt" del "%prog_dir%logo.txt" >NUL 2>&1 +echo %bs%>"%prog_dir%hlogo.txt" +FINDSTR /L ".nsp" "%prog_dir%hlogo.txt" >"%prog_dir%logo.txt" +FINDSTR /L ".nca" "%prog_dir%hlogo.txt" >>"%prog_dir%logo.txt" +del "%prog_dir%hlogo.txt" +set /p custlogo=<"%prog_dir%logo.txt" +::echo %custlogo% +for /f "usebackq tokens=*" %%f in ( "%prog_dir%logo.txt" ) do ( +set "logoname=%%~nxf" +if "%%~nxf"=="%%~nf.nsp" goto ext_log +if "%%~nxf"=="%%~nf.nca" goto check_log +) + +:ext_log +del "%prog_dir%logo.txt" +if not exist "%w_folder%" MD "%w_folder%" >NUL 2>&1 +if exist "%w_folder%\normal" RD /S /Q "%w_folder%\normal" >NUL 2>&1 + +%pycommand% "%squirrel%" --nsptype "%custlogo%">"%w_folder%\nsptype.txt" +set /p nsptype=<"%w_folder%\nsptype.txt" +del "%w_folder%\nsptype.txt" +if "%nsptype%" EQU "DLC" echo. +if "%nsptype%" EQU "DLC" echo ---NSP DOESN'T HAVE A CONTROL NCA--- +if "%nsptype%" EQU "DLC" echo. +if "%nsptype%" EQU "DLC" ( goto multi_set_clogo ) +MD "%w_folder%\normal" >NUL 2>&1 +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\normal" --NSP_copy_nca_control "%custlogo%" +echo ................ +echo "提取LOGO" +echo ................ +echo. +goto multi_checkagain + +:check_log +del "%prog_dir%logo.txt" +if not exist "%w_folder%" MD "%w_folder%" >NUL 2>&1 +if exist "%w_folder%\normal" RD /S /Q "%w_folder%\normal" >NUL 2>&1 +%pycommand% "%squirrel%" --ncatype "%custlogo%">"%w_folder%\ncatype.txt" +set /p ncatype=<"%w_folder%\ncatype.txt" +del "%w_folder%\ncatype.txt" +if "%ncatype%" NEQ "Content.CONTROL" echo. +if "%ncatype%" NEQ "Content.CONTROL" echo ---NCA IS NOT A CONTROL TYPE--- +if "%ncatype%" NEQ "Content.CONTROL" echo. +if "%ncatype%" NEQ "Content.CONTROL" ( goto multi_set_clogo ) +MD "%w_folder%\normal" >NUL 2>&1 +copy "%custlogo%" "%w_folder%\normal\%logoname%" +echo. +goto multi_checkagain +exit + + +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// +::拆分模式 +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// + +:SPLMODE +cls +call :program_logo +if exist %w_folder% RD /S /Q "%w_folder%" >NUL 2>&1 +echo ----------------------------------------------- +echo 拆分模式已激活 +echo ----------------------------------------------- +if exist "splist.txt" goto sp_prevlist +goto sp_manual_INIT +:sp_prevlist +set conta=0 +for /f "tokens=*" %%f in (splist.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (splist.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del splist.txt ) +endlocal +if not exist "splist.txt" goto sp_manual_INIT +ECHO ....................................................... +ECHO 发现了以前的列表, 你想做什么? +:sp_prevlist0 +ECHO ....................................................... +echo 输入"1",从上一列表自动开始处理 +echo 输入"2",删除列表并创建新列表. +echo 输入"3",继续构建上一个列表 +echo ....................................................... +echo NOTE: By pressing 3 you'll see the previous list +echo before starting the processing the files and you will +echo be able to add and delete items from the list +echo. +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="3" goto sp_showlist +if /i "%bs%"=="2" goto sp_delist +if /i "%bs%"=="1" goto sp_start_cleaning +if /i "%bs%"=="0" goto manual_Reentry +echo. +echo BAD CHOICE +goto sp_prevlist0 +:sp_delist +del splist.txt +cls +call :program_logo +echo ----------------------------------------------- +echo 拆分模式已激活 +echo ----------------------------------------------- +echo .................................. +echo 你已经开始一个新的列表 +echo .................................. +:sp_manual_INIT +endlocal +ECHO *********************************************** +echo 输入"0",返回模式选择菜单 +ECHO *********************************************** +echo. +set /p bs="请将文件或文件夹拖到窗口上,然后按回车键: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +dir "%bs%\" >nul 2>nul +if not errorlevel 1 goto sp_checkfolder +if exist "%bs%\" goto sp_checkfolder +goto sp_checkfile +:sp_checkfolder +DIR /B /S "%bs%\*.nsp">hsplist.txt +FINDSTR /L ".nsp" hsplist.txt>>splist.txt +del hsplist.txt +DIR /B /S "%bs%\*.xci">hsplist2.txt +FINDSTR /L ".xci" hsplist2.txt>>splist.txt +del hsplist2.txt +goto sp_checkagain +:sp_checkfile +echo %bs%>>hsplist.txt +FINDSTR /L ".nsp" hsplist.txt>>splist.txt +del hsplist.txt +echo %bs%>>hsplist2.txt +FINDSTR /L ".xci" hsplist2.txt>>splist.txt +del hsplist2.txt +goto sp_checkagain +echo. +:sp_checkagain +echo 你想做什么? +echo ...................................................................... +echo "拖动另一个文件或文件夹,然后按回车键将项目添加到列表中" +echo. +echo 输入"1",开始处理 +echo 输入"e",退出 +echo 输入"i",查看要处理的文件列表 +echo 输入"r",删除一些文件(从底部开始计数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="拖放文件/文件夹或设置选项: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto sp_start_cleaning +if /i "%bs%"=="e" goto salida +if /i "%bs%"=="i" goto sp_showlist +if /i "%bs%"=="r" goto sp_r_files +if /i "%bs%"=="z" del splist.txt +dir "%bs%\" >nul 2>nul +if not errorlevel 1 goto sp_checkfolder +if exist "%bs%\" goto sp_checkfolder +goto sp_checkfile +goto salida + +:sp_r_files +set /p bs="输入要删除的文件数(从底部开始): " +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (splist.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:sp_update_list1 +if !pos1! GTR !pos2! ( goto :sp_update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :sp_update_list1 +:sp_update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>splist.txt.new +endlocal +move /y "splist.txt.new" "splist.txt" >nul +endlocal + +:sp_showlist +cls +call :program_logo +echo ------------------------------------------------- +echo 拆分模式已激活 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (splist.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (splist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 你加了 !conta! 个要处理的文件 +echo ................................................. +endlocal + +goto sp_checkagain + +:sp_cl_wrongchoice +echo 错误的选择 +echo ............ +:sp_start_cleaning +echo ******************************************************* +echo 接下来选择您要执行的操作 +echo ******************************************************* +echo 输入"1",重新打包为NSP +echo 输入"2",重新打包为xci +echo 输入"3",全部都要 +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="b" goto sp_checkagain +if /i "%bs%"=="1" set "vrepack=nsp" +if /i "%bs%"=="2" set "vrepack=xci" +if /i "%bs%"=="3" set "vrepack=both" +if %vrepack%=="none" goto sp_cl_wrongchoice +cls +call :program_logo +for /f "tokens=*" %%f in (splist.txt) do ( +set "name=%%~nf" +set "filename=%%~nxf" +set "end_folder=%%~nf" +set "orinput=%%f" +if "%%~nxf"=="%%~nf.nsp" call :split_content +if "%%~nxf"=="%%~nf.xci" call :split_content +%pycommand% "%squirrel%" --strip_lines "%prog_dir%splist.txt" +setlocal enabledelayedexpansion +if exist "%fold_output%\!end_folder!" RD /S /Q "%fold_output%\!end_folder!" >NUL 2>&1 +MD "%fold_output%\!end_folder!" >NUL 2>&1 +move "%w_folder%\*.xci" "%fold_output%\!end_folder!\" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%\!end_folder!\" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%\!end_folder!\" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%\!end_folder!\" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%fold_output%\!end_folder!\%filename%.nsp" ) +if exist "%w_folder%" RD /S /Q "%w_folder%" >NUL 2>&1 +endlocal +call :sp_contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +:SPLIT_exit_choice +if exist splist.txt del splist.txt +if /i "%va_exit%"=="true" echo 程序将立即关闭 +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择菜单 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto SPLIT_exit_choice + +:split_content +set "showname=%orinput%" +set "sp_repack=%vrepack%" +if exist "%w_folder%" RD /S /Q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" >NUL 2>&1 +call :processing_message +call :squirrell +%pycommand% "%squirrel%" %buffer% -o "%w_folder%" --splitter "%orinput%" -pe "secure" +for /f "usebackq tokens=*" %%f in ("%w_folder%\dirlist.txt") do ( +setlocal enabledelayedexpansion +rem echo "!sp_repack!" +set "tfolder=%%f" +set "fname=%%~nf" +set "test=%%~nf" +set test=!test:[DLC]=! +rem echo !test! +rem echo "!test!" +rem echo "!fname!" +if "!test!" NEQ "!fname!" ( set "sp_repack=nsp" ) +rem echo "!sp_repack!" +set "test=%%~nf" +set test=!test:[UPD]=! +rem echo !test! +rem echo "!test!" +rem echo "!fname!" +if "!test!" NEQ "!fname!" ( set "sp_repack=nsp" ) +rem echo "!sp_repack!" +if "!sp_repack!" EQU "nsp" ( call "%nsp_lib%" "sp_convert" "%w_folder%" "!tfolder!" "!fname!" ) +if "!sp_repack!" EQU "xci" ( call "%xci_lib%" "sp_repack" "%w_folder%" "!tfolder!" "!fname!" ) +if "!sp_repack!" EQU "both" ( call "%nsp_lib%" "sp_convert" "%w_folder%" "!tfolder!" "!fname!" ) +if "!sp_repack!" EQU "both" ( call "%xci_lib%" "sp_repack" "%w_folder%" "!tfolder!" "!fname!" ) +endlocal +%pycommand% "%squirrel%" --strip_lines "%prog_dir%dirlist.txt" +) +del "%w_folder%\dirlist.txt" >NUL 2>&1 + +call :thumbup +call :delay +exit /B + +:sp_contador_NF +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (splist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍然有 !conta! 个要处理的文件 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// +::更新模式 -> 第一步 +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// + +:UPDMODE +cls +call :program_logo +if exist %w_folder% RD /S /Q "%w_folder%" >NUL 2>&1 +echo ------------------------------------------------------------------- +echo 更新模式已激活 +echo ------------------------------------------------------------------- +if exist "UPDlist.txt" goto upd_prevlist +goto upd_ADD_BASE +:upd_prevlist +set conta=0 +for /f "tokens=*" %%f in (UPDlist.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (UPDlist.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del UPDlist.txt ) +endlocal +:upd_ADD_BASE +ECHO. +echo 输入"0",返回模式选择菜单 +ECHO. +ECHO ******************************************************************* +ECHO 添加基本内容 +ECHO ******************************************************************* +ECHO. +set /p bs="请拖动要更新的文件,然后按回车键: " + +set basefile=%bs:"=% +if /i "%basefile%"=="0" goto manual_Reentry + +set "test=%basefile%" +set "basecheck=false" +set test=%test:.xci=% +if "%test%" NEQ "%basefile%" ( set "basecheck=true" ) +set "test=%basefile%" +set test=%test:.nsp=% +if "%test%" NEQ "%basefile%" ( set "basecheck=true" ) +::echo %basecheck% +if "%basecheck%" EQU "false" ( +echo. +echo ---文件类型错误。请重试--- +echo. +) +if "%basecheck%" EQU "false" ( goto upd_ADD_BASE) +if not exist "UPDlist.txt" goto upd_ADD_UPD_FILES +ECHO .................................................................. +ECHO 发现了以前的列表,你想做什么? +:upd_prevlist0 +ECHO .................................................................. +echo 输入"1",开始更新 基本内容 +echo 输入"2",删除列表并创建新列表. +echo 输入"3",继续构建上一个列表 +echo .................................................................. +echo NOTE: By pressing 3 you'll see the previous list +echo before starting the processing the files and you will +echo be able to add and delete items from the list +echo. +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="3" goto upd_showlist +if /i "%bs%"=="2" goto upd_delist +if /i "%bs%"=="1" goto upd_starts +if /i "%bs%"=="0" goto manual_Reentry +echo. +echo BAD CHOICE +goto upd_prevlist0 +:upd_delist +del UPDlist.txt +cls +call :program_logo +echo ------------------------------------------------------------------- +echo 更新模式已激活 +echo ------------------------------------------------------------------- +echo .................................. +echo 你已经开始一个新的列表 +echo .................................. +:upd_ADD_UPD_FILES +ECHO. +ECHO ******************************************************************* +echo 输入"1",将文件夹添加到列表中 +echo 输入"2",将文件添加到列表中 +echo 输入"3",通过本地文件库,将文件添加到列表 +echo 输入"4",通过folder-walker递归的方式,将文件添加到列表 +ECHO 请添加要用于更新基本内容的文件 +ECHO ******************************************************************* +ECHO. +echo 输入"0",返回模式选择菜单 +ECHO. +%pycommand% "%squirrel%" -t nsp xci -tfile "%prog_dir%UPDlist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +if /i "%eval%"=="0" goto manual_Reentry +if /i "%eval%"=="1" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%UPDlist.txt" mode=folder ext="nsp xci" ) 2>&1>NUL +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%UPDlist.txt" mode=file ext="nsp xci" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%UPDlist.txt" "extlist=nsp xci" ) +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%UPDlist.txt" "extlist=nsp xci" ) + +goto upd_checkagain + +echo. +:upd_checkagain +echo. +echo 你想做什么? +echo ...................................................................... +echo "拖动另一个文件或文件夹,然后按回车键将项目添加到列表中" +echo. +echo 输入"1",开始处理 +echo 输入"2",将另一个文件夹添加到列表中 +echo 输入"3",将另一个文件添加到列表中 +echo 输入"4",通过本地文件库,将文件添加到列表 +echo 输入"5",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"6",更改基本内容 +echo 输入"i",查看要处理的文件列表 +echo 输入"b",查看当前基本内容 +echo 输入"r",删除一些文件(从底部开始计数) +echo 输入"z",删除整个列表 +echo 输入"e",退出 +echo ...................................................................... +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" -t nsp xci -tfile "%prog_dir%UPDlist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal + +if /i "%eval%"=="0" goto manual_Reentry +if /i "%eval%"=="1" goto upd_starts +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%UPDlist.txt" mode=folder ext="nsp xci" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%UPDlist.txt" mode=file ext="nsp xci" ) 2>&1>NUL +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%UPDlist.txt" "extlist=nsp xci" ) +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%UPDlist.txt" "extlist=nsp xci" ) +if /i "%eval%"=="6" goto upd_ADD_BASE +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto upd_showlist +if /i "%eval%"=="b" goto upd_showbase +if /i "%eval%"=="r" goto upd_r_files +if /i "%eval%"=="z" del UPDlist.txt +goto upd_checkagain + + +:upd_showbase +cls +call :program_logo +ECHO ------------------------------------------------- +ECHO 基本内容 +ECHO ------------------------------------------------- +echo %basefile% +goto upd_checkagain + +:upd_r_files +set /p bs="输入要删除的文件数(从底部开始): " +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (UPDlist.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:upd_update_list1 +if !pos1! GTR !pos2! ( goto :upd_update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :upd_update_list1 +:upd_update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>UPDlist.txt.new +endlocal +move /y "UPDlist.txt.new" "UPDlist.txt" >nul +endlocal + +:upd_showlist +cls +call :program_logo +echo ------------------------------------------------- +echo 更新模式 已激活 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (UPDlist.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (UPDlist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 你加了 !conta! 个要处理的文件 +echo ................................................. +endlocal + +goto upd_checkagain + +:upd_wrongchoice1 +echo 错误的选择 +echo ............ +:upd_starts +echo ******************************************************* +echo 您希望如何处理基本文件 +echo ******************************************************* +echo 输入"1",以删除以前的更新 +echo 输入"2",以删除以前的DLC +echo 输入"3",以删除以前的更新和DLC +echo. +ECHO ****************************************** +echo 输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set cskip=none +if /i "%bs%"=="b" goto upd_checkagain +if /i "%bs%"=="1" set "cskip=upd" +if /i "%bs%"=="2" set "cskip=dlc" +if /i "%bs%"=="3" set "cskip=both" +if %cskip%=="none" goto upd_wrongchoice1 +goto upd_pack_choice +:upd_wrongchoice2 +echo 错误的选择 +echo ............ +:upd_pack_choice +echo ******************************************************* +echo 接下来选择您要执行的操作 +echo ******************************************************* +echo 输入"1",重新打包为NSP +echo 输入"2",重新打包为xci +echo 输入"3",全部都要 +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set vrepack=none +if /i "%bs%"=="b" goto upd_checkagain +if /i "%bs%"=="1" set "vrepack=nsp" +if /i "%bs%"=="2" set "vrepack=xci" +if /i "%bs%"=="3" set "vrepack=both" +if %vrepack%=="none" goto upd_pack_choice +if /i "%skipRSVprompt%"=="true" set "patchRSV=-pv false" +if /i "%skipRSVprompt%"=="true" goto upd_KeyChange_skip +echo ******************************************************* +echo 是否要魔改所需的系统版本 +echo ******************************************************* +echo If you choose to patch it will be set to match the +echo nca crypto so it'll only ask to update your system +echo in the case it's necessary +echo. +echo 输入"0",不魔改 +echo 输入"1",魔改 +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set patchRSV=none +if /i "%bs%"=="b" goto upd_checkagain +if /i "%bs%"=="0" set "patchRSV=-pv false" +if /i "%bs%"=="1" set "patchRSV=-pv true" +if /i "%patchRSV%"=="none" echo 错误的选择 +if /i "%patchRSV%"=="none" goto m_RSV_wrongchoice +if /i "%bs%"=="0" goto upd_KeyChange_skip + +:upd_KeyChange_wrongchoice +echo ******************************************************* +echo 设置魔改最大系统版本号 +echo ******************************************************* +echo Depending on your choice keygeneration and RSV will be +echo lowered to the corresponding keygeneration range in case +echo read keygeneration value is bigger than the one specified +echo in the program. +echo THIS WON'T ALWAYS WORK TO LOWER THE FIRMWARE REQUIREMENT. +echo. +echo 输入"f",不魔改 +echo 输入"0",魔改版本FW 1.0 +echo 输入"1",魔改版本FW 2.0-2.3 +echo 输入"2",魔改版本FW 3.0 +echo 输入"3",魔改版本FW 3.0.1-3.0.2 +echo 输入"4",魔改版本FW 4.0.0-4.1.0 +echo 输入"5",魔改版本FW 5.0.0-5.1.0 +echo 输入"6",魔改版本FW 6.0.0-6.1.0 +echo 输入"7",魔改版本FW 6.2.0 +echo 输入"8",魔改版本FW 7.0.0-8.0.1 +echo 输入"9",魔改版本FW 8.1.0 +echo 输入"10",魔改版本FW 9.0.0-9.0.1 +echo 输入"11",魔改版本FW 9.1.0 +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set "vkey=none" +if /i "%bs%"=="b" goto upd_checkagain +if /i "%bs%"=="f" set "vkey=-kp false" +if /i "%bs%"=="0" set "vkey=-kp 0" +if /i "%bs%"=="0" set "capRSV=--RSVcap 0" +if /i "%bs%"=="1" set "vkey=-kp 1" +if /i "%bs%"=="1" set "capRSV=--RSVcap 65796" +if /i "%bs%"=="2" set "vkey=-kp 2" +if /i "%bs%"=="2" set "capRSV=--RSVcap 201327002" +if /i "%bs%"=="3" set "vkey=-kp 3" +if /i "%bs%"=="3" set "capRSV=--RSVcap 201392178" +if /i "%bs%"=="4" set "vkey=-kp 4" +if /i "%bs%"=="4" set "capRSV=--RSVcap 268435656" +if /i "%bs%"=="5" set "vkey=-kp 5" +if /i "%bs%"=="5" set "capRSV=--RSVcap 335544750" +if /i "%bs%"=="6" set "vkey=-kp 6" +if /i "%bs%"=="6" set "capRSV=--RSVcap 402653494" +if /i "%bs%"=="7" set "vkey=-kp 7" +if /i "%bs%"=="7" set "capRSV=--RSVcap 404750336" +if /i "%bs%"=="8" set "vkey=-kp 8" +if /i "%bs%"=="8" set "capRSV=--RSVcap 469762048" +if /i "%bs%"=="9" set "vkey=-kp 9" +if /i "%bs%"=="9" set "capRSV=--RSVcap 537919488" +if /i "%bs%"=="10" set "vkey=-kp 10" +if /i "%bs%"=="10" set "capRSV=--RSVcap 603979776" +if /i "%bs%"=="11" set "vkey=-kp 11" +if /i "%bs%"=="11" set "capRSV=--RSVcap 605028352" +if /i "%vkey%"=="none" echo 错误的选择 +if /i "%vkey%"=="none" goto m_KeyChange_wrongchoice + +:upd_KeyChange_skip +cls +call :program_logo + +if exist "%w_folder%" RD /S /Q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" >NUL 2>&1 +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" -cskip "%cskip%" --updbase "%basefile%" + +for %%i in ("%basefile%") do ( +set "filename=%%~ni" +) +call :getname + +for /f "tokens=*" %%f in (UPDlist.txt) do ( +set "name=%%~nf" +set "filename=%%~nxf" +set "orinput=%%f" +if "%%~nxf"=="%%~nf.nsp" call :UPD_nsp_manual +if "%%~nxf"=="%%~nf.xci" call :UPD_xci_manual +%pycommand% "%squirrel%" --strip_lines "%prog_dir%UPDlist.txt" +call :UPD_contador_NF +) +set "filename=%end_folder%[multi]" +if "%vrepack%" EQU "nsp" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "xci" ( call "%xci_lib%" "repack" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%nsp_lib%" "convert" "%w_folder%" ) +if "%vrepack%" EQU "both" ( call "%xci_lib%" "repack" "%w_folder%" ) + +setlocal enabledelayedexpansion +if not exist "%fold_output%" MD "%fold_output%" >NUL 2>&1 +set "gefolder=%fold_output%\!end_folder!" +if "%oforg%" EQU "inline" ( set "gefolder=%fold_output%" ) +MD "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xci" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%gefolder%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%gefolder%" >NUL 2>&1 +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +if exist "%w_folder%\archfolder" ( %pycommand% "%squirrel%" -ifo "%w_folder%\archfolder" -archive "%gefolder%\%filename%.nsp" ) +endlocal +RD /S /Q "%w_folder%" >NUL 2>&1 +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +:UPD_exit_choice +if exist UPDlist.txt del UPDlist.txt +if /i "%va_exit%"=="true" echo 程序将立即关闭 +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择菜单 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto UPD_exit_choice + +:UPD_nsp_manual +set "showname=%orinput%" +call :processing_message +call :squirrell +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" -tfile "%prog_dir%UPDlist.txt" %nf_cleaner% "%orinput%" +if "%zip_restore%" EQU "true" ( set "ziptarget=%orinput%" ) +if "%zip_restore%" EQU "true" ( call :makezip ) +call :thumbup +call :delay +exit /B + +:UPD_xci_manual +set "showname=%orinput%" +call :processing_message +MD "%w_folder%" >NUL 2>&1 +MD "%w_folder%\secure" >NUL 2>&1 +MD "%w_folder%\normal" >NUL 2>&1 +MD "%w_folder%\update" >NUL 2>&1 +call :getname +echo ------------------------------------ +echo 从XCI提取安全分区 +echo ------------------------------------ +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\secure" -tfile "%prog_dir%UPDlist.txt" %nf_cleaner% "%orinput%" +echo DONE +call :thumbup +call :delay +exit /B + +:UPD_contador_NF +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (UPDlist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍然有 !conta! 个要处理的文件 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// +:: 数据库生成模式 +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// +:DBMODE +cls +call :program_logo +echo ----------------------------------------------- +echo 数据库生成模式 已激活 +echo ----------------------------------------------- +if exist "DBL.txt" goto DBprevlist +goto DBmanual_INIT +:DBprevlist +set conta=0 +for /f "tokens=*" %%f in (DBL.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (DBL.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del DBL.txt ) +endlocal +if not exist "DBL.txt" goto DBmanual_INIT +ECHO ....................................................... +ECHO 发现了以前的列表, 你想做什么? +:DBprevlist0 +ECHO ....................................................... +echo 输入"1",从上一列表自动开始处理 +echo 输入"2",删除列表并创建新列表. +echo 输入"3",继续构建上一个列表 +echo ....................................................... +echo NOTE: By pressing 3 you'll see the previous list +echo before starting the processing the files and you will +echo be able to add and delete items from the list +echo. +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="3" goto DBshowlist +if /i "%bs%"=="2" goto DBdelist +if /i "%bs%"=="1" goto DBstart_cleaning +if /i "%bs%"=="0" goto manual_Reentry +echo. +echo BAD CHOICE +goto DBprevlist0 +:DBdelist +del DBL.txt +cls +call :program_logo +echo ----------------------------------------------- +echo 单文件处理已激活 +echo ----------------------------------------------- +echo .................................. +echo 你已经开始一个新的列表 +echo .................................. +:DBmanual_INIT +endlocal +ECHO *********************************************** +echo 输入"0",返回模式选择菜单 +ECHO *********************************************** +echo. +set /p bs="请将文件或文件夹拖到窗口上,然后按回车键: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +set "targt=%bs%" +dir "%bs%\" >nul 2>nul +if not errorlevel 1 goto DBcheckfolder +if exist "%bs%\" goto DBcheckfolder +goto DBcheckfile +:DBcheckfolder +%pycommand% "%squirrel%" -t nsp -tfile "%prog_dir%DBL.txt" -ff "%targt%" +%pycommand% "%squirrel%" -t nsx -tfile "%prog_dir%DBL.txt" -ff "%targt%" +goto DBcheckagain +:DBcheckfile +%pycommand% "%squirrel%" -t nsp -tfile "%prog_dir%DBL.txt" -ff "%targt%" +%pycommand% "%squirrel%" -t nsx -tfile "%prog_dir%DBL.txt" -ff "%targt%" +goto DBcheckagain +echo. +:DBcheckagain +echo 你想做什么? +echo ...................................................................... +echo "拖动另一个文件或文件夹,然后按回车键将项目添加到列表中" +echo. +echo 输入"1",开始处理 +echo 输入"e",退出 +echo 输入"i",查看要处理的文件列表 +echo 输入"r",删除一些文件(从底部开始计数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="拖放文件/文件夹或设置选项: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto DBstart_cleaning +if /i "%bs%"=="e" goto DBsalida +if /i "%bs%"=="i" goto DBshowlist +if /i "%bs%"=="r" goto DBr_files +if /i "%bs%"=="z" del DBL.txt +set "targt=%bs%" +dir "%bs%\" >nul 2>nul +if not errorlevel 1 goto DBcheckfolder +if exist "%bs%\" goto DBcheckfolder +goto DBcheckfile +goto DBsalida + +:DBr_files +set /p bs="输入要删除的文件数(从底部开始): " +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (DBL.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:DBupdate_list1 +if !pos1! GTR !pos2! ( goto :DBupdate_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :DBupdate_list1 +:DBupdate_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>DBL.txt.new +endlocal +move /y "DBL.txt.new" "DBL.txt" >nul +endlocal + +:DBshowlist +cls +call :program_logo +echo ------------------------------------------------- +echo 单文件处理已激活 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (DBL.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (DBL.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 你加了 !conta! 个要处理的文件 +echo ................................................. +endlocal + +goto DBcheckagain + +:DBs_cl_wrongchoice +echo 错误的选择 +echo ............ +:DBstart_cleaning +echo ******************************************************* +echo 接下来选择您要执行的操作 +echo ******************************************************* +echo 输入"1",nutdb数据库生成 +echo 输入"2",扩展数据库生成 +echo 输入"3",生成无钥数据库(扩展) +echo 输入"4",生成上述3个数据库 +echo 输入"Z",生成zip文件S +echo. +ECHO ****************************************** +echo 或输入"0",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="0" goto DBcheckagain +if /i "%bs%"=="Z" set "vrepack=zip" +if /i "%bs%"=="Z" goto DBs_start +if /i "%bs%"=="1" set "dbformat=nutdb" +if /i "%bs%"=="1" goto DBs_GENDB +if /i "%bs%"=="2" set "dbformat=extended" +if /i "%bs%"=="2" goto DBs_GENDB +if /i "%bs%"=="3" set "dbformat=keyless" +if /i "%bs%"=="3" goto DBs_GENDB +if /i "%bs%"=="4" set "dbformat=all" +if /i "%bs%"=="4" goto DBs_GENDB +if %vrepack%=="none" goto DBs_cl_wrongchoice + +:DBs_start +cls +call :program_logo +for /f "tokens=*" %%f in (DBL.txt) do ( +set "name=%%~nf" +set "filename=%%~nxf" +set "orinput=%%f" +set "ziptarget=%%f" +if "%vrepack%" EQU "zip" ( set "zip_restore=true" ) +if "%%~nxf"=="%%~nf.nsp" call :DBnsp_manual +if "%%~nxf"=="%%~nf.nsx" call :DBnsp_manual +if "%%~nxf"=="%%~nf.NSP" call :DBnsp_manual +if "%%~nxf"=="%%~nf.NSX" call :DBnsp_manual +%pycommand% "%squirrel%" --strip_lines "%prog_dir%DBL.txt" +call :DBcontador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +:DBs_exit_choice +if exist DBL.txt del DBL.txt +if /i "%va_exit%"=="true" echo 程序将立即关闭 +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择菜单 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto s_exit_choice + +:DBnsp_manual +set "filename=%name%" +set "showname=%orinput%" +if exist "%w_folder%" rmdir /s /q "%w_folder%" >NUL 2>&1 +MD "%w_folder%" +call :squirrell + +if "%vrepack%" EQU "zip" ( goto nsp_just_zip ) + +:DBnsp_just_zip +if "%zip_restore%" EQU "true" ( call :makezip ) +rem call :getname +if "%vrename%" EQU "true" call :addtags_from_nsp +if "%zip_restore%" EQU "true" ( goto :nsp_just_zip2 ) + +:DBnsp_just_zip2 + +if exist "%w_folder%\*.zip" ( MD "%zip_fold%" ) >NUL 2>&1 +move "%w_folder%\*.zip" "%zip_fold%" >NUL 2>&1 +RD /S /Q "%w_folder%" >NUL 2>&1 + +echo DONE +call :thumbup +call :delay + +:DBend_nsp_manual +exit /B + +:DBs_GENDB +for /f "tokens=*" %%f in (DBL.txt) do ( +set "orinput=%%f" +set "db_file=%prog_dir%INFO\%dbformat%_DB.txt" +set "dbdir=%prog_dir%INFO\" +call :DBGeneration +%pycommand% "%squirrel%" --strip_lines "%prog_dir%DBL.txt" +call :DBcontador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto DBs_exit_choice + +:DBGeneration +if not exist "%dbdir%" MD "%dbdir%">NUL 2>&1 +%pycommand% "%squirrel%" --dbformat "%dbformat%" -dbfile "%db_file%" -tfile "%prog_dir%DBL.txt" -nscdb "%orinput%" +exit /B + +:DBcontador_NF +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (DBL.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍然有 !conta! 个要处理的文件 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + +:://///////////////////////////////////////////////// +::NSCB FILE INFO MODE +:://///////////////////////////////////////////////// +:INFMODE +call "%infobat%" "%prog_dir%" +cls +goto TOP_INIT + +:://///////////////////////////////////////////////// +::NSCB_options.cmd configuration script +:://///////////////////////////////////////////////// +:OPT_CONFIG +call "%batconfig%" "%op_file%" "%listmanager%" "%batdepend%" +cls +goto TOP_INIT + + +:://///////////////////////////////////////////////// +::SUBROUTINES +:://///////////////////////////////////////////////// + +:squirrell +echo ,;:;;, +echo ;;;;; +echo .=', ;:;;:, +echo /_', "=. ';:;:; +echo @=:__, \,;:;:' +echo _(\.= ;:;;' +echo `"_( _/="` +echo `"' +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " BASED ON THE WORK OF BLAWAR AND LUCA FRAGA " +ECHO VERSION 1.00c (LEGACY) +ECHO ------------------------------------------------------------------------------------- +ECHO Program's github: https://github.com/julesontheroad/NSC_BUILDER +ECHO Blawar's github: https://github.com/blawar +ECHO Luca Fraga's github: https://github.com/LucaFraga +ECHO ------------------------------------------------------------------------------------- +exit /B + +:delay +PING -n 2 127.0.0.1 >NUL 2>&1 +exit /B + +:thumbup +echo. +echo /@ +echo \ \ +echo ___\ \ +echo (__O) \ +echo (____@) \ +echo (____@) \ +echo (__o)_ \ +echo \ \ +echo. +echo 希望你玩的开心 +exit /B + +:getname + +if not exist %w_folder% MD %w_folder% >NUL 2>&1 + +set filename=%filename:[nap]=% +set filename=%filename:[xc]=% +set filename=%filename:[nc]=% +set filename=%filename:[rr]=% +set filename=%filename:[xcib]=% +set filename=%filename:[nxt]=% +set filename=%filename:[Trimmed]=% +echo %filename% >"%w_folder%\fname.txt" + +::deletebrackets +for /f "usebackq tokens=1* delims=[" %%a in ("%w_folder%\fname.txt") do ( + set end_folder=%%a) +echo %end_folder%>"%w_folder%\fname.txt" +::deleteparenthesis +for /f "usebackq tokens=1* delims=(" %%a in ("%w_folder%\fname.txt") do ( + set end_folder=%%a) +echo %end_folder%>"%w_folder%\fname.txt" +::I also wanted to remove_( +set end_folder=%end_folder:_= % +set end_folder=%end_folder:~0,-1% +del "%w_folder%\fname.txt" >NUL 2>&1 +if "%vrename%" EQU "true" ( set "filename=%end_folder%" ) +exit /B + +:makezip +echo. +echo Making zip for %ziptarget% +echo. +%pycommand% "%squirrel%" %buffer% %patchRSV% %vkey% %capRSV% -o "%w_folder%\zip" --zip_combo "%ziptarget%" +%pycommand% "%squirrel%" -o "%w_folder%\zip" --NSP_c_KeyBlock "%ziptarget%" +%pycommand% "%squirrel%" --nsptitleid "%ziptarget%" >"%w_folder%\nsptitleid.txt" +if exist "%w_folder%\secure\*.dat" ( move "%w_folder%\secure\*.dat" "%w_folder%\zip" ) >NUL 2>&1 + +set /p titleid=<"%w_folder%\nsptitleid.txt" +del "%w_folder%\nsptitleid.txt" >NUL 2>&1 +%pycommand% "%squirrel%" --nsptype "%ziptarget%" >"%w_folder%\nsptype.txt" +set /p type=<"%w_folder%\nsptype.txt" +del "%w_folder%\nsptype.txt" >NUL 2>&1 +%pycommand% "%squirrel%" --ReadversionID "%ziptarget%">"%w_folder%\nspversion.txt" +set /p verID=<"%w_folder%\nspversion.txt" +set "verID=V%verID%" +del "%w_folder%\nspversion.txt" >NUL 2>&1 +if "%type%" EQU "BASE" ( set "ctag=" ) +if "%type%" EQU "UPDATE" ( set ctag=[UPD] ) +if "%type%" EQU "DLC" ( set ctag=[DLC] ) +%pycommand% "%squirrel%" -i "%ziptarget%">"%w_folder%\zip\fileinfo[%titleid%][%verID%]%ctag%.txt" +%pycommand% "%squirrel%" --filelist "%ziptarget%">"%w_folder%\zip\ORIGINAL_filelist[%titleid%][%verID%]%ctag%.txt" +"%zip%" -ifo "%w_folder%\zip" -zippy "%w_folder%\%titleid%[%verID%]%ctag%.zip" +RD /S /Q "%w_folder%\zip" >NUL 2>&1 +exit /B + +:processing_message +echo Processing %showname% +echo. +exit /B + +:check_titlerights +%pycommand% "%squirrel%" --nsp_htrights "%target%">"%w_folder%\trights.txt" +set /p trights=<"%w_folder%\trights.txt" +del "%w_folder%\trights.txt" >NUL 2>&1 +if "%trights%" EQU "TRUE" ( goto ct_true ) +if "%vrepack%" EQU "nsp" ( set "vpack=none" ) +if "%vrepack%" EQU "both" ( set "vpack=xci" ) +:ct_true +exit /B + + +:addtags_from_nsp +%pycommand% "%squirrel%" --nsptitleid "%orinput%" >"%w_folder%\nsptitleid.txt" +set /p titleid=<"%w_folder%\nsptitleid.txt" +del "%w_folder%\nsptitleid.txt" >NUL 2>&1 +%pycommand% "%squirrel%" --nsptype "%orinput%" >"%w_folder%\nsptype.txt" +set /p type=<"%w_folder%\nsptype.txt" +del "%w_folder%\nsptype.txt" >NUL 2>&1 +if "%type%" EQU "BASE" ( set filename=%filename%[%titleid%][v0] ) +if "%type%" EQU "UPDATE" ( set filename=%filename%[%titleid%][UPD] ) +if "%type%" EQU "DLC" ( set filename=%filename%[%titleid%][DLC] ) + +exit /B +:addtags_from_xci +dir "%w_folder%\secure\*.cnmt.nca" /b >"%w_folder%\ncameta.txt" +set /p ncameta=<"%w_folder%\ncameta.txt" +del "%w_folder%\ncameta.txt" >NUL 2>&1 +set "ncameta=%w_folder%\secure\%ncameta%" +%pycommand% "%squirrel%" --ncatitleid "%ncameta%" >"%w_folder%\ncaid.txt" +set /p titleid=<"%w_folder%\ncaid.txt" +del "%w_folder%\ncaid.txt" +echo [%titleid%]>"%w_folder%\titleid.txt" + +FINDSTR /L 000] "%w_folder%\titleid.txt">"%w_folder%\isbase.txt" +set /p c_base=<"%w_folder%\isbase.txt" +del "%w_folder%\isbase.txt" +FINDSTR /L 800] "%w_folder%\titleid.txt">"%w_folder%\isupdate.txt" +set /p c_update=<"%w_folder%\isupdate.txt" +del "%w_folder%\isupdate.txt" + +set ttag=[DLC] + +if [%titleid%] EQU %c_base% set ttag=[v0] +if [%titleid%] EQU %c_update% set ttag=[UPD] + +set filename=%filename%[%titleid%][%ttag%] +del "%w_folder%\titleid.txt" +exit /B + +:call_new +call "%prog_dir%\NSCB.bat" +exit /B + +:salida +::pause +exit diff --git a/py/Regional/ZH/ztools/MNG.bat b/py/Regional/ZH/ztools/MNG.bat new file mode 100644 index 00000000..0eb77f1d --- /dev/null +++ b/py/Regional/ZH/ztools/MNG.bat @@ -0,0 +1,302 @@ +@ECHO OFF +:TOP_INIT +CD /d "%prog_dir%" + +REM ////////////////////////////////////////////////// +REM ///////////////////////////////////////////////// +REM 文件管理 +REM ///////////////////////////////////////////////// +REM //////////////////////////////////////////////// +:normalmode +cls +call :program_logo +echo ------------------------------------------------- +echo 文件管理已激活 +echo ------------------------------------------------- +if exist "mnglist.txt" goto prevlist +goto manual_INIT +:prevlist +set conta=0 +for /f "tokens=*" %%f in (mnglist.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (mnglist.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del mnglist.txt ) +endlocal +if not exist "mnglist.txt" goto manual_INIT +ECHO ....................................................... +ECHO 发现以前的列表。你想做什么? +:prevlist0 +ECHO ....................................................... +echo 输入"1",从上一个列表自动开始处理 +echo 输入"2",删除列表并创建一个新列表。 +echo 输入"3",继续构建上一个列表 +echo ....................................................... +echo 注意:输入3,您将在开始处理文件之前看到上一个列表, +echo 并且可以从列表中添加和删除项目 +echo. +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="3" goto showlist +if /i "%bs%"=="2" goto delist +if /i "%bs%"=="1" goto start_cleaning +if /i "%bs%"=="0" exit /B +echo. +echo 错误的选择 +goto prevlist0 +:delist +del mnglist.txt +cls +call :program_logo +echo ------------------------------------------------- +echo 文件管理已激活 +echo ------------------------------------------------- +echo .................................. +echo 已经开始一个新的列表 +echo .................................. + +:manual_INIT +endlocal +ECHO *********************************************** +echo 输入"1",将文件夹添加到列表中 +echo 输入"2",将文件添加到列表中 +echo 输入"3",通过本地文件库,将文件添加到列表 +echo 输入"4",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"0",返回模式选择菜单 +ECHO *********************************************** +echo. +%pycommand% "%squirrel%" -t nsp nsx -tfile "%prog_dir%mnglist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" exit /B +if /i "%eval%"=="1" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mnglist.txt" mode=folder ext="nsp nsx" ) 2>&1>NUL +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mnglist.txt" mode=file ext="nsp nsx" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%mnglist.txt" "extlist=nsp nsx" ) +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%mnglist.txt" "extlist=nsp nsx" ) +goto checkagain +echo. +:checkagain +echo 你想要做什么?? +echo ...................................................................... +echo "拖动另一个文件或文件夹并按Enter键将项目添加到列表中" +echo. +echo 输入"1",开始处理 +echo 输入"2",将另一个文件夹添加到列表中 +echo 输入"3",将另一个文件添加到列表中 +echo 输入"4",通过本地文件库,将文件添加到列表 +echo 输入"5",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"e",退出 +echo 输入"i",以查看要处理的文件列表 +echo 输入"r",删除一些文件 (从底部计数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" -t nsp nsx -tfile "%prog_dir%mnglist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal + +if /i "%eval%"=="0" exit /B +if /i "%eval%"=="1" goto start_cleaning +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mnglist.txt" mode=folder ext="nsp nsx" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mnglist.txt" mode=file ext="nsp nsx" ) 2>&1>NUL +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%mnglist.txt" "extlist=nsp nsx" ) +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%mnglist.txt" "extlist=nsp nsx" ) +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto showlist +if /i "%eval%"=="r" goto r_files +if /i "%eval%"=="z" del mnglist.txt + +goto checkagain + +:r_files +set /p bs="输入要删除的文件数 (从底部): " +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (mnglist.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:update_list1 +if !pos1! GTR !pos2! ( goto :update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :update_list1 +:update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>mnglist.txt.new +endlocal +move /y "mnglist.txt.new" "mnglist.txt" >nul +endlocal + +:showlist +cls +call :program_logo +echo ------------------------------------------------- +echo 文件管理已激活 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (mnglist.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (mnglist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 你添加了 !conta! 要处理的文件 +echo ................................................. +endlocal + +goto checkagain + +:s_cl_wrongchoice +echo 错误的选择 +echo ............ +:start_cleaning +echo ******************************************************* +echo 选择如何处理文件 +echo ******************************************************* +echo. +echo 输入"1",检查NSP或NSX扩展,取决于tk +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="1" goto renamensx +if %vrepack%=="none" goto s_cl_wrongchoice + +:renamensx +cls +call :program_logo +CD /d "%prog_dir%" +%pycommand% "%squirrel%" -lib_call management rename_nsx "%prog_dir%mnglist.txt" + +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:s_exit_choice +if exist mnglist.txt del mnglist.txt +if /i "%va_exit%"=="true" echo PROGRAM WILL CLOSE NOW +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto s_exit_choice + +:contador_NF +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (mnglist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍有 !conta! 要处理的文件 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + + +:://///////////////////////////////////////////////// +::子程序 +:://///////////////////////////////////////////////// + +:squirrell +echo ,;:;;, +echo ;;;;; +echo .=', ;:;;:, +echo /_', "=. ';:;:; +echo @=:__, \,;:;:' +echo _(\.= ;:;;' +echo `"_( _/="` +echo `"' +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " BASED ON THE WORK OF BLAWAR AND LUCA FRAGA " +ECHO VERSION 1.00c +ECHO ------------------------------------------------------------------------------------- +ECHO Program's github: https://github.com/julesontheroad/NSC_BUILDER +ECHO Blawar's github: https://github.com/blawar +ECHO Luca Fraga's github: https://github.com/LucaFraga +ECHO ------------------------------------------------------------------------------------- +exit /B + +:delay +PING -n 2 127.0.0.1 >NUL 2>&1 +exit /B + +:thumbup +echo. +echo /@ +echo \ \ +echo ___\ \ +echo (__O) \ +echo (____@) \ +echo (____@) \ +echo (__o)_ \ +echo \ \ +echo. +echo 希望您玩的开心 +exit /B + + +:salida +exit /B diff --git a/py/Regional/ZH/ztools/MtpCmxciFTLocal.bat b/py/Regional/ZH/ztools/MtpCmxciFTLocal.bat new file mode 100644 index 00000000..c8990d83 --- /dev/null +++ b/py/Regional/ZH/ztools/MtpCmxciFTLocal.bat @@ -0,0 +1,363 @@ +@ECHO OFF +:TOP_INIT +CD /d "%prog_dir%" +set "bat_name=%~n0" +Title NSC_Builder v1.00c -- Profile: %ofile_name% -- by JulesOnTheRoad + +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// +:: MTP 多文件模式 +:://///////////////////////////////////////////////// +:://///////////////////////////////////////////////// + +:multimode +if exist %w_folder% RD /S /Q "%w_folder%" >NUL 2>&1 +if exist "%list_folder%\a_multi" RD /S /Q "%list_folder%\a_multi" >NUL 2>&1 +cls +call :program_logo +echo ----------------------------------------------- +echo 创建多XCI并传输到MTP +echo ----------------------------------------------- +if exist "mlistMTP.txt" del "mlistMTP.txt" +:multi_manual_INIT +endlocal +set skip_list_split="false" +set "mlistfol=%list_folder%\m_multiMTP" +echo 拖动文件或文件夹以创建列表 +echo 注意:记住在拖动每个文件\文件夹后按回车 +echo. +ECHO *********************************************** +echo 输入"1",以处理先前保存的作业 +echo 输入"2",通过选择器将另一个文件夹添加到列表 +echo 输入"3",通过选择器将另一个文件添加到列表 +echo 输入"4",通过本地文件库,将文件添加到列表 +echo 输入"5",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"0",返回模式选择菜单 +ECHO *********************************************** +echo. +%pycommand% "%squirrel%" -t nsp xci nsz xcz -tfile "%prog_dir%mlistMTP.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" goto MAIN +if /i "%eval%"=="1" set skip_list_split="true" +if /i "%eval%"=="1" goto m_patch_keygen +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mlistMTP.txt" mode=folder ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mlistMTP.txt" mode=file ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call mtp.mtpinstaller select_from_local_libraries -xarg "%prog_dir%mlistMTP.txt" "mode=installer" ) +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%mlistMTP.txt" "extlist=nsp xci nsz xcz" ) + +goto multi_checkagain + +:multi_checkagain +echo. +set "mlistfol=%list_folder%\a_multiMTP" +echo 你想让我做什么? +echo ...................................................................... +echo “拖动其他文件或文件夹,然后按回车将项目添加到列表中” +echo. +echo 输入"1",开始处理当前列表 +echo 输入"2",添加到已保存列表并进行处理 +echo 输入"3",保存列表供以后使用 +echo 输入"4",通过选择器将另一个文件夹添加到列表 +echo 输入"5",通过选择器将另一个文件添加到列表 +echo 输入"6",通过本地文件库,将文件添加到列表 +echo 输入"7",通过folder-walker递归的方式,将文件添加到列表 +echo. +echo 输入"e",退出 +echo 输入"i",请参阅要处理的文件列表 +echo 输入"r",删除一些文件(从下往上数) +echo 输入"z",删除一些文件(从下往上数) +echo ...................................................................... +ECHO ************************************************* +echo 或者输入"0",返回到模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" -t nsp xci nsz xcz -tfile "%prog_dir%mlistMTP.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal + +if /i "%eval%"=="0" goto MAIN +if /i "%eval%"=="1" set "mlistfol=%list_folder%\a_multiMTP" +if /i "%eval%"=="1" goto m_patch_keygen +if /i "%eval%"=="2" set "mlistfol=%list_folder%\m_multiMTP" +if /i "%eval%"=="2" goto m_patch_keygen +if /i "%eval%"=="3" set "mlistfol=%list_folder%\m_multiMTP" +if /i "%eval%"=="3" goto multi_saved_for_later +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mlistMTP.txt" mode=folder ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mlistMTP.txt" mode=file ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="6" ( %pycommand% "%squirrel%" -lib_call mtp.mtpinstaller select_from_local_libraries -xarg "%prog_dir%mlistMTP.txt" "mode=installer" ) +if /i "%eval%"=="7" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%mlistMTP.txt" "extlist=nsp xci nsz xcz" ) +REM if /i "%eval%"=="2" goto multi_set_clogo +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto multi_showlist +if /i "%eval%"=="r" goto multi_r_files +if /i "%eval%"=="z" del mlistMTP.txt + +goto multi_checkagain + +:multi_saved_for_later +if not exist "%list_folder%" MD "%list_folder%" >NUL 2>&1 +if not exist "%mlistfol%" MD "%mlistfol%" >NUL 2>&1 +echo 再次保存列表作业 +echo ...................................................................... +echo 输入"1",将列表保存为合并任务(单个多文件列表) +echo 输入"2",通过文件的baseid将列表另存为多任务 +echo. +ECHO ******************************************* +echo 输入"b",以继续建立列表 +echo 输入"0",返回选择菜单 +ECHO ******************************************* +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="b" goto multi_checkagain +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" goto multi_saved_for_later1 +if /i "%bs%"=="2" ( %pycommand% "%squirrel%" -splid "%mlistfol%" -tfile "%prog_dir%mlistMTP.txt" ) +if /i "%bs%"=="2" del "%prog_dir%mlistMTP.txt" +if /i "%bs%"=="2" goto multi_saved_for_later2 +echo 错误的选项!! +goto multi_saved_for_later +:multi_saved_for_later1 +echo. +echo 选择任务名称 +echo ...................................................................... +echo 该列表将以您选择的名称保存在列表的文件夹中(路径是"程序目录\list\m_multi") +echo. +set /p lname="Input name for the list job: " +set lname=%lname:"=% +move /y "%prog_dir%mlistMTP.txt" "%mlistfol%\%lname%.txt" >nul +echo. +echo 任务已保存!!! +:multi_saved_for_later2 +echo. +echo 输入"0",返回模式选择 +echo 输入"1",以创建其他任务 +echo 输入"2",退出程序 +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" echo. +if /i "%bs%"=="1" echo CREATE ANOTHER JOB +if /i "%bs%"=="1" goto multi_manual_INIT +if /i "%bs%"=="1" goto salida +goto multi_saved_for_later2 + +:multi_r_files +set /p bs="输入您要删除的文件数(从底部开始):" +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (mlistMTP.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:multi_update_list1 +if !pos1! GTR !pos2! ( goto :multi_update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :multi_update_list1 +:multi_update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>mlistMTP.txt.new +endlocal +move /y "mlistMTP.txt.new" "mlistMTP.txt" >nul +endlocal + +:multi_showlist +cls +call :program_logo +echo ------------------------------------------------- +echo 多重打包模式已激活 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (mlistMTP.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (mlistMTP.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 您已添加 !conta! 个要处理的文件 +echo ................................................. +endlocal + +goto multi_checkagain + +:m_KeyChange_wrongchoice +echo 错误的选项 +echo ............ +:m_patch_keygen +echo ******************************************************* +echo 检查控制台固件和补丁要求? +echo ******************************************************* +echo. +echo 1. YES +echo 2. NO +echo. +ECHO ****************************************** +echo 或者输入"0",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +set dopatchkg=none +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" set "dopatchkg=True" +if /i "%bs%"=="2" set "dopatchkg=False" + +if %dopatchkg%=="none" goto m_KeyChange_wrongchoice + +:m_KeyChange_skip +if not exist "%list_folder%" MD "%list_folder%" >NUL 2>&1 +if not exist "%mlistfol%" MD "%mlistfol%" >NUL 2>&1 +if %skip_list_split% EQU "true" goto m_process_jobs +echo ******************************************************* +echo 您如何处理文件? +echo ******************************************************* +echo 通过基本ID分开模式可以识别与每个游戏相对应的内容并创建多个来自同一列表文件的multi-xci或multi-nsp +echo. +echo 输入"1",将所有文件合并为一个文件 +echo 输入"2",以baseid分隔成多个文件 +echo. +ECHO ***************************************** +echo 或输入"b",返回选项列表 +ECHO ***************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="b" goto multi_checkagain +if /i "%bs%"=="1" move /y "%prog_dir%mlistMTP.txt" "%mlistfol%\mlistMTP.txt" >nul +if /i "%bs%"=="1" goto m_process_jobs +if /i "%bs%"=="2" goto m_split_merge +goto m_KeyChange_skip + +:m_split_merge +cls +call :program_logo +%pycommand% "%squirrel%" -splid "%mlistfol%" -tfile "%prog_dir%mlistMTP.txt" + +:m_process_jobs +dir "%mlistfol%\*.txt" /b > "%prog_dir%mlistMTP.txt" +for /f "tokens=*" %%f in (mlistMTP.txt) do ( +set "listname=%%f" +call :program_logo +call :m_split_merge_list_name + +%pycommand% "%squirrel%" -lib_call mtp.mtpxci generate_multixci_and_transfer -xarg "%mlistfol%\%%f" "%w_folder%" "destiny=False" "kgpatch=%dopatchkg%" "verification=%MTP_verification%" +echo. +%pycommand% "%squirrel%" --strip_lines "%prog_dir%mlistMTP.txt" "1" "true" +if exist "%mlistfol%\%%f" del "%mlistfol%\%%f" +) + +if exist mlistMTP.txt del mlistMTP.txt +goto m_exit_choice + +:m_split_merge_list_name +echo ******************************************************* +echo 正在处理列表 %listname% +echo ******************************************************* +exit /B + + +:m_exit_choice +ECHO --------------------------------------------------- +ECHO *********** 所有文件已处理! ************* +ECHO --------------------------------------------------- +if exist mlistMTP.txt del mlistMTP.txt +if /i "%va_exit%"=="true" echo PROGRAM WILL CLOSE NOW +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" goto salida +goto m_exit_choice + +:://///////////////////////////////////////////////// +::子程序 +:://///////////////////////////////////////////////// + +:squirrell +echo ,;:;;, +echo ;;;;; +echo .=', ;:;;:, +echo /_', "=. ';:;:; +echo @=:__, \,;:;:' +echo _(\.= ;:;;' +echo `"_( _/="` +echo `"' +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " A MTP MANAGER FOR DBI INSTALLER " +ECHO VERSION 1.00c (MTP) +ECHO ------------------------------------------------------------------------------------- +ECHO DBI by DUCKBILL: https://github.com/rashevskyv/switch/releases +ECHO Latest DBI: https://github.com/rashevskyv/switch/releases/tag/462 +ECHO ------------------------------------------------------------------------------------- +exit /B + +:delay +PING -n 2 127.0.0.1 >NUL 2>&1 +exit /B + +:thumbup +echo. +echo /@ +echo \ \ +echo ___\ \ +echo (__O) \ +echo (____@) \ +echo (____@) \ +echo (__o)_ \ +echo \ \ +echo. +echo 希望您玩得开心 +exit /B +:MAIN +call "%prog_dir%\MtpMode.bat" +exit /B + +:salida +::pause +exit diff --git a/py/Regional/ZH/ztools/MtpCxciFTLocal.bat b/py/Regional/ZH/ztools/MtpCxciFTLocal.bat new file mode 100644 index 00000000..ee1a746b --- /dev/null +++ b/py/Regional/ZH/ztools/MtpCxciFTLocal.bat @@ -0,0 +1,296 @@ +@ECHO OFF +:TOP_INIT +CD /d "%prog_dir%" +set "bat_name=%~n0" +Title NSC_Builder v1.00c -- Profile: %ofile_name% -- by JulesOnTheRoad +REM ////////////////////////////////////////////////// +REM ///////////////////////////////////////////////// +REM 手动模式开始。单文件处理 +REM ///////////////////////////////////////////////// +REM //////////////////////////////////////////////// +:normalmode +cls +call :program_logo +echo ----------------------------------------------- +echo MTP - 生成XCI和传输已激活 +echo ----------------------------------------------- +if exist "mtpxci.txt" goto prevlist +goto manual_INIT +:prevlist +set conta=0 +for /f "tokens=*" %%f in (mtpxci.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (mtpxci.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del mtpxci.txt ) +endlocal +if not exist "mtpxci.txt" goto manual_INIT +ECHO ....................................................... +ECHO 找到一个上一个列表。你想让我做什么? +:prevlist0 +ECHO ....................................................... +echo 输入"1",自动从上一个列表开始处理 +echo 输入"2",以删除列表并创建一个新列表 +echo 输入"3",继续建立上一个列表 +echo ....................................................... +echo 注意:按3,您将在开始处理文件之前看到上一个列表,并且可以从列表中添加和删除项目 +echo. +ECHO ************************************************* +echo 或者输入"0",返回到模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="3" goto showlist +if /i "%bs%"=="2" goto delist +if /i "%bs%"=="1" goto start_xci_process +if /i "%bs%"=="0" goto MAIN +echo. +echo 错误的选项 +goto prevlist0 +:delist +del mtpxci.txt +cls +call :program_logo +echo ----------------------------------------------- +echo MTP - 生成XCI和传输已激活 +echo ----------------------------------------------- +echo .................................. +echo 您决定开始新的列表 +echo .................................. +:manual_INIT +endlocal +ECHO *********************************************** +echo 输入"1",通过选择器将文件夹添加到列表 +echo 输入"2",通过选择器将文件添加到列表 +echo 输入"3",通过本地文件库,将文件添加到列表 +echo 输入"4",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"0",返回到模式选择菜单 +ECHO *********************************************** +echo. +%pycommand% "%squirrel%" -t nsp xci nsz nsx xcz -tfile "%prog_dir%mtpxci.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" goto MAIN +if /i "%eval%"=="1" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mtpxci.txt" mode=folder ext="nsp xci nsz nsx xcz" ) 2>&1>NUL +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mtpxci.txt" mode=file ext="nsp xci nsz nsx xcz" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call mtp.mtpinstaller select_from_local_libraries -xarg "%prog_dir%mtpxci.txt" "mode=installer" ) +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%mtpxci.txt" "extlist=nsp xci nsz xcz" ) +goto checkagain +echo. +:checkagain +echo 你想让我做什么? +echo ...................................................................... +echo “拖动其他文件或文件夹,然后按回车将项目添加到列表中” +echo. +echo 输入"1",开始处理 +echo 输入"2",通过选择器添加另一个文件夹到列表 +echo 输入"3",通过选择器添加另一个文件到列表 +echo 输入"4",通过本地文件库,将文件添加到列表 +echo 输入"5",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"e",退出 +echo 输入"i",以查看要处理的文件列表 +echo 输入"r",删除一些文件(从下往上数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或者输入"0",返回到模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" -t nsp xci nsz nsx xcz -tfile "%prog_dir%mtpxci.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal + +if /i "%eval%"=="0" goto MAIN +if /i "%eval%"=="1" goto patch_keygen +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mtpxci.txt" mode=folder ext="nsp xci nsz nsx xcz" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%mtpxci.txt" mode=file ext="nsp xci nsz nsx xcz" ) 2>&1>NUL +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call mtp.mtpinstaller select_from_local_libraries -xarg "%prog_dir%mtpxci.txt" "mode=installer" ) +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%mtpxci.txt" "extlist=nsp xci nsz xcz" ) +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto showlist +if /i "%eval%"=="r" goto r_files +if /i "%eval%"=="z" del mtpxci.txt + +goto checkagain + +:r_files +set /p bs="输入您要删除的文件数(从底部开始):" +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (mtpxci.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:update_list1 +if !pos1! GTR !pos2! ( goto :update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :update_list1 +:update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>mtpxci.txt.new +endlocal +move /y "mtpxci.txt.new" "mtpxci.txt" >nul +endlocal + +:showlist +cls +call :program_logo +echo ------------------------------------------------- +echo MTP - 生成XCI和传输已激活 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (mtpxci.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (mtpxci.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 您已添加 !conta! 个要处理的文件 +echo ................................................. +endlocal + +goto checkagain + +:patch_keygen_wrongchoice +echo 错误的选项 +echo ............ +:patch_keygen +echo ******************************************************* +echo 检查控制台固件和补丁要求? +echo ******************************************************* +echo. +echo 1. YES +echo 2. NO +echo. +ECHO ****************************************** +echo 或者输入"0",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +set dopatchkg=none +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" set "dopatchkg=True" +if /i "%bs%"=="2" set "dopatchkg=False" + +if %dopatchkg%=="none" goto patch_keygen_wrongchoice + +:start_xci_process +%pycommand% "%squirrel%" -lib_call mtp.mtpxci loop_xci_transfer -xarg "%prog_dir%mtpxci.txt" "destiny=False" "verification=%MTP_verification%" "%w_folder%" "patch_keygen=%dopatchkg%" "mode=single" + +ECHO --------------------------------------------------- +ECHO *********** 所有文件已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + + +:s_exit_choice +if exist mtpxci.txt del mtpxci.txt +if /i "%va_exit%"=="true" echo PROGRAM WILL CLOSE NOW +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" goto salida +goto s_exit_choice + + +echo 程序即将退出 +PING -n 2 127.0.0.1 >NUL 2>&1 +goto salida + + +:://///////////////////////////////////////////////// +::子程序 +:://///////////////////////////////////////////////// + +:squirrell +echo ,;:;;, +echo ;;;;; +echo .=', ;:;;:, +echo /_', "=. ';:;:; +echo @=:__, \,;:;:' +echo _(\.= ;:;;' +echo `"_( _/="` +echo `"' +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " A MTP MANAGER FOR DBI INSTALLER " +ECHO VERSION 1.00c (MTP) +ECHO ------------------------------------------------------------------------------------- +ECHO DBI by DUCKBILL: https://github.com/rashevskyv/switch/releases +ECHO Latest DBI: https://github.com/rashevskyv/switch/releases/tag/462 +ECHO ------------------------------------------------------------------------------------- +exit /B + +:delay +PING -n 2 127.0.0.1 >NUL 2>&1 +exit /B + +:thumbup +echo. +echo /@ +echo \ \ +echo ___\ \ +echo (__O) \ +echo (____@) \ +echo (____@) \ +echo (__o)_ \ +echo \ \ +echo. +echo 希望您玩得开心 +exit /B + +:MAIN +call "%prog_dir%\MtpMode.bat" +exit /B + +:salida +::pause +exit diff --git a/py/Regional/ZH/ztools/MtpFTLocal.bat b/py/Regional/ZH/ztools/MtpFTLocal.bat new file mode 100644 index 00000000..e1fc81ec --- /dev/null +++ b/py/Regional/ZH/ztools/MtpFTLocal.bat @@ -0,0 +1,290 @@ +@ECHO OFF +:TOP_INIT +CD /d "%prog_dir%" +set "bat_name=%~n0" +Title NSC_Builder v1.00c -- Profile: %ofile_name% -- by JulesOnTheRoad + +:MAIN +if exist "MTP2.txt" goto prevlist +goto manual_INIT +:prevlist +set conta=0 +for /f "tokens=*" %%f in (MTP2.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (MTP2.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del MTP2.txt ) +endlocal +if not exist "MTP2.txt" goto manual_INIT +ECHO ....................................................... +ECHO 找到一个上一个列表。你想要做什么? +:prevlist0 +ECHO ....................................................... +echo 输入"1",自动从上一个列表开始处理 +echo 输入"2",以删除列表并创建一个新列表 +echo 输入"3",继续建立上一个列表 +echo ....................................................... +echo 注意:按3,您将在开始处理文件之前看到上一个列表,并且可以从列表中添加和删除项目 +echo. +ECHO ************************************************* +echo 或者输入"0",返回到模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="3" goto showlist +if /i "%bs%"=="2" goto delist +if /i "%bs%"=="1" goto start_1transfer +if /i "%bs%"=="0" call "%prog_dir%ztools\MtpMode.bat" +echo. +echo 错误的选项 +goto prevlist0 +:delist +del MTP2.txt +cls +call :program_logo +echo ------------------------------------------------- +echo MTP - 文件传输模式已激活 +echo ------------------------------------------------- +echo .................................. +echo 您决定开始新的列表 +echo .................................. + +:manual_INIT +endlocal +echo ”拖动其他文件或文件夹,然后按回车将项目添加到列表中“ +echo. +ECHO *********************************************** +echo 输入"1",通过选择器将文件夹添加到列表 +echo 输入"2",通过选择器将文件添加到列表 +echo 输入"3",通过本地文件库,将文件添加到列表 +echo 输入"4",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"0",返回到模式选择菜单 +ECHO *********************************************** +echo. +%pycommand% "%squirrel%" -t all -tfile "%prog_dir%MTP2.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" call "%prog_dir%ztools\MtpMode.bat" +if /i "%eval%"=="1" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%MTP2.txt" mode=folder ext="False" ) 2>&1>NUL +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%MTP2.txt" mode=file ext="False" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call mtp.mtpinstaller select_from_local_libraries -xarg "%prog_dir%MTP2.txt" "mode=transfer" ) +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%MTP2.txt" "extlist=all" ) + +goto checkagain +echo. +:checkagain +echo 你想要做什么? +echo ...................................................................... +echo ”拖动其他文件或文件夹,然后按回车将项目添加到列表中“ +echo. +echo 输入"1",开始处理 +echo 输入"2",通过选择器添加另一个文件夹到列表 +echo 输入"3",通过选择器添加另一个文件到列表 +echo 输入"4",通过本地文件库,将文件添加到列表 +echo 输入"5",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"e",退出 +echo 输入"i",以查看要处理的文件列表 +echo 输入"r",删除一些文件(从下往上数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或者输入"0",返回到模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" -t all -tfile "%prog_dir%MTP2.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal + +if /i "%eval%"=="0" call "%prog_dir%ztools\MtpMode.bat" +if /i "%eval%"=="1" goto start_1transfer +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%MTP2.txt" mode=folder ext="False" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%MTP2.txt" mode=file ext="False" ) 2>&1>NUL +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call mtp.mtpinstaller select_from_local_libraries -xarg "%prog_dir%MTP2.txt" "mode=transfer" ) +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%MTP2.txt" "extlist=all" ) +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto showlist +if /i "%eval%"=="r" goto r_files +if /i "%eval%"=="z" del MTP2.txt + +goto checkagain + +:r_files +set /p bs="输入您要删除的文件数(从底部开始):" +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (MTP2.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:update_list1 +if !pos1! GTR !pos2! ( goto :update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :update_list1 +:update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>MTP2.txt.new +endlocal +move /y "MTP2.txt.new" "MTP2.txt" >nul +endlocal + +:showlist +cls +call :program_logo +echo ------------------------------------------------- +echo MTP - 文件传输模式已激活 +echo ------------------------------------------------- +ECHO 要处理的文件: +for /f "tokens=*" %%f in (MTP2.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (MTP2.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 您已添加 !conta! 个要处理的文件 +echo ................................................. +endlocal + +goto checkagain + +:s_MTP2_wrongchoice +echo 错误的选项 +echo ............ +:start_1transfer + + +:start_transfer +cls +call :program_logo +CD /d "%prog_dir%" + +%pycommand% "%squirrel%" -lib_call mtp.mtp_game_manager loop_transfer -xarg "%prog_dir%MTP2.txt" + +ECHO --------------------------------------------------- +ECHO *********** 所有文件已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:s_exit_choice +if exist MTP2.txt del MTP2.txt +if /i "%va_exit%"=="true" echo PROGRAM WILL CLOSE NOW +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto s_exit_choice + +:://///////////////////////////////////////////////// +::NSCB_options.cmd configuration script +:://///////////////////////////////////////////////// +:OPT_CONFIG +call "%batconfig%" "%op_file%" "%listmanager%" "%batdepend%" +cls +goto TOP_INIT + +:contador_MTP2 +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (MTP2.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍有 !conta! 个要处理的文件 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + +:://///////////////////////////////////////////////// +::子程序 +:://///////////////////////////////////////////////// + +:squirrell +echo ,;:;;, +echo ;;;;; +echo .=', ;:;;:, +echo /_', "=. ';:;:; +echo @=:__, \,;:;:' +echo _(\.= ;:;;' +echo `"_( _/="` +echo `"' +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " A MTP MANAGER FOR DBI INSTALLER " +ECHO VERSION 1.00c (MTP) +ECHO ------------------------------------------------------------------------------------- +ECHO DBI by DUCKBILL: https://github.com/rashevskyv/switch/releases +ECHO Latest DBI: https://github.com/rashevskyv/switch/releases/tag/462 +ECHO ------------------------------------------------------------------------------------- +exit /B + +:delay +PING -n 2 127.0.0.1 >NUL 2>&1 +exit /B + +:thumbup +echo. +echo /@ +echo \ \ +echo ___\ \ +echo (__O) \ +echo (____@) \ +echo (____@) \ +echo (__o)_ \ +echo \ \ +echo. +echo 希望您玩得开心 +exit /B + +:call_main +call "%prog_dir%\NSCB.bat" +exit /B + +:salida +::pause +exit diff --git a/py/Regional/ZH/ztools/MtpInstallRemote.bat b/py/Regional/ZH/ztools/MtpInstallRemote.bat new file mode 100644 index 00000000..1267ade5 --- /dev/null +++ b/py/Regional/ZH/ztools/MtpInstallRemote.bat @@ -0,0 +1,292 @@ +@ECHO OFF +:TOP_INIT +CD /d "%prog_dir%" +set "bat_name=%~n0" +Title NSC_Builder v1.00c -- Profile: %ofile_name% -- by JulesOnTheRoad + +:MAIN +if exist "MTP1GD.txt" goto prevlist +goto manual_INIT +:prevlist +set conta=0 +for /f "tokens=*" %%f in (MTP1GD.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (MTP1GD.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del MTP1GD.txt ) +endlocal +if not exist "MTP1GD.txt" goto manual_INIT +ECHO ....................................................... +ECHO 找到一个上一个列表。你想要怎么做? +:prevlist0 +ECHO ....................................................... +echo 输入"1",自动从上一个列表开始处理 +echo 输入"2",以删除列表并创建一个新列表 +echo 输入"3",继续建立上一个列表 +echo ....................................................... +echo 注意:按3,您将在开始处理文件之前看到上一个列表,并且可以从列表中添加和删除项目 +echo. +ECHO ************************************************* +echo 或者输入"0",返回到模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="3" goto showlist +if /i "%bs%"=="2" goto delist +if /i "%bs%"=="1" goto select_medium +if /i "%bs%"=="0" call "%prog_dir%ztools\MtpMode.bat" +echo. +echo 错误的选项 +goto prevlist0 +:delist +del MTP1GD.txt +cls +call :program_logo +echo ------------------------------------------------- +echo MTP - 从谷歌网盘安装 +echo ------------------------------------------------- +echo .................................. +echo 您决定开始新的列表 +echo .................................. + +:manual_INIT +endlocal +cls +call :program_logo +echo ******************************************************* +echo 选择功能 +echo ******************************************************* +echo. +echo 输入"1",从缓存文件中选择文件 +echo 输入"2",通过本地文件库,将文件添加到列表 +echo 输入"3",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"c",为远程库重新生成缓存 +ECHO. +echo --- 或输入GDRIVE公共链接或1FICHIER链接 --- +echo. +ECHO ************************************************* +echo 或者输入"0",返回到模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" --mtp_eval_link "%prog_dir%MTP1GD.txt" "%uinput%" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" goto MAIN +if /i "%eval%"=="1" ( %pycommand% "%squirrel%" -lib_call picker_walker remote_select_from_cache -xarg "%prog_dir%MTP1GD.txt" ) +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call picker_walker remote_select_from_libraries -xarg "%prog_dir%MTP1GD.txt" ) +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call picker_walker remote_select_from_walker -xarg "%prog_dir%MTP1GD.txt" "nsp nsz" ) +if /i "%eval%"=="c" ( %pycommand% "%squirrel%" -lib_call workers concurrent_cache ) +echo. +goto checkagain + +:checkagain +echo 你想做什么? +echo ...................................................................... +echo “拖动其他文件或文件夹,然后按回车将项目添加到列表中” +echo. +echo 输入"1",开始安装 +echo 输入"2",以从缓存文件中选择文件 +echo 输入"3",通过本地文件库,将文件添加到列表 +echo 输入"4",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"c",为远程库重新生成缓存 +echo 输入"e",退出 +echo 输入"i",以查看要处理的文件列表 +echo 输入"r",删除一些文件(从下往上数) +echo 输入"z",删除整个列表 +ECHO. +echo --- 或输入GDRIVE公共链接或1FICHIER链接 --- +echo. +ECHO ************************************************* +echo 或者输入"0",返回到模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" --mtp_eval_link "%prog_dir%MTP1GD.txt" "%uinput%" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" goto MAIN +if /i "%eval%"=="1" goto select_medium +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call picker_walker remote_select_from_cache -xarg "%prog_dir%MTP1GD.txt" ) +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call picker_walker remote_select_from_libraries -xarg "%prog_dir%MTP1GD.txt" ) +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker remote_select_from_walker -xarg "%prog_dir%MTP1GD.txt" "nsp nsz" ) +if /i "%eval%"=="c" ( %pycommand% "%squirrel%" -lib_call workers concurrent_cache ) +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto showlist +if /i "%eval%"=="r" goto r_files +if /i "%eval%"=="z" del "%prog_dir%MTP1GD.txt" +echo. +goto checkagain + +:r_files +set /p bs="输入您要删除的文件数(从底部开始):" +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (MTP1GD.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:update_list1 +if !pos1! GTR !pos2! ( goto :update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :update_list1 +:update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>MTP1GD.txt.new +endlocal +move /y "MTP1GD.txt.new" "MTP1GD.txt" >nul +endlocal +:showlist +cls +call :program_logo +echo ------------------------------------------------- +echo MTP - 从谷歌网盘安装 +echo ------------------------------------------------- +ECHO 要处理的文件: +for /f "tokens=*" %%f in (MTP1GD.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (MTP1GD.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 您已添加 !conta! 个要处理的文件 +echo ................................................. +endlocal +goto checkagain + +:select_medium_wrongchoice +echo 错误的选项 +echo ............ +:select_medium +echo ******************************************************* +echo 安装媒体 +echo ******************************************************* +echo. +echo 1. SD +echo 2. EMMC +echo. +ECHO ****************************************** +echo 或者输入"0",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +set medium=none +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" set "medium=SD" +if /i "%bs%"=="2" set "medium=EMMC" + +if %medium%=="none" goto select_medium_wrongchoice + +:START_INSTALLATION +cls +call :program_logo +CD /d "%prog_dir%" +%pycommand% "%squirrel%" -lib_call mtp.mtp_gdrive loop_install -xarg "%prog_dir%MTP1GD.txt" "destiny=%medium%" "%w_folder%" "ch_medium=%MTP_aut_ch_medium%" "check_fw=%MTP_chk_fw%" "patch_keygen=%MTP_prepatch_kg%" "ch_base=%MTP_prechk_Base%" "ch_other=%MTP_prechk_Upd%" "truecopy=%MTP_pdrive_truecopy%" +echo. +ECHO --------------------------------------------------- +ECHO *********** 所有文件已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:s_exit_choice +if exist MTP1GD.txt del MTP1GD.txt +if /i "%va_exit%"=="true" echo PROGRAM WILL CLOSE NOW +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto s_exit_choice + + +:://///////////////////////////////////////////////// +::子程序 +:://///////////////////////////////////////////////// + +:squirrell +echo ,;:;;, +echo ;;;;; +echo .=', ;:;;:, +echo /_', "=. ';:;:; +echo @=:__, \,;:;:' +echo _(\.= ;:;;' +echo `"_( _/="` +echo `"' +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " A MTP MANAGER FOR DBI INSTALLER " +ECHO VERSION 1.00c (MTP) +ECHO ------------------------------------------------------------------------------------- +ECHO DBI by DUCKBILL: https://github.com/rashevskyv/switch/releases +ECHO Latest DBI: https://github.com/rashevskyv/switch/releases/tag/462 +ECHO ------------------------------------------------------------------------------------- +exit /B + +:delay +PING -n 2 127.0.0.1 >NUL 2>&1 +exit /B + +:thumbup +echo. +echo /@ +echo \ \ +echo ___\ \ +echo (__O) \ +echo (____@) \ +echo (____@) \ +echo (__o)_ \ +echo \ \ +echo. +echo 希望您玩得开心 +exit /B + +:MAIN +call "%prog_dir%\MtpMode.bat" +exit /B + +:salida +::pause +exit diff --git a/py/Regional/ZH/ztools/MtpMode.bat b/py/Regional/ZH/ztools/MtpMode.bat new file mode 100644 index 00000000..bbca93c0 --- /dev/null +++ b/py/Regional/ZH/ztools/MtpMode.bat @@ -0,0 +1,731 @@ +@ECHO OFF +:TOP_INIT +CD /d "%prog_dir%" +set "bat_name=%~n0" +Title NSC_Builder v1.00c -- Profile: %ofile_name% -- by JulesOnTheRoad + +:MAIN +cls +call :program_logo +ECHO ............................................................. +echo 输入"1",进入游戏安装模式 +echo 输入"2",进入文件传输模式 +echo 输入"3",从库自动更新设备模式 +echo 输入"4",DUMP或卸载游戏 +echo 输入"5",进入备份存档模式 +echo 输入"6",进入设备信息模式 +echo 输入"7",进入通用SX AUTOLOADER文件模式 +echo 输入"0",进入配置模式 +echo. +echo 输入"N",进入标准模式 +echo 输入"D",进入谷歌网盘模式 +echo 输入"L",进入传统模式 +echo ............................................................. +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="1" goto G_INST +if /i "%bs%"=="2" goto F_TR +if /i "%bs%"=="3" goto AUTOUPDATE +if /i "%bs%"=="4" goto INSTALLED +if /i "%bs%"=="5" goto SAVES +if /i "%bs%"=="6" goto DEV_INF +if /i "%bs%"=="7" goto SX_AUTOLOADER +if /i "%bs%"=="N" goto call_main +if /i "%bs%"=="L" goto LegacyMode +if /i "%bs%"=="D" goto GDMode +if /i "%bs%"=="0" goto OPT_CONFIG +goto MAIN + +:LegacyMode +call "%prog_dir%ztools\LEGACY.bat" +exit /B + +:GDMode +call "%prog_dir%ztools\DriveMode.bat" +exit /B + +:G_INST +cls +call :program_logo +echo ------------------------------------------------- +echo MTP - 文件传输模式已激活 +echo ------------------------------------------------- +echo ******************************************************* +echo 选择功能 +echo ******************************************************* +echo. +echo 1. 从本地文件安装游戏 +echo 2. 从远程库(GDRIVE)安装游戏 +echo. +ECHO ****************************************** +echo 或者输入"0",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" goto G_INST_LOCAL +if /i "%bs%"=="2" goto G_INST_GDRIVE +goto G_INST + +:G_INST_GDRIVE +call "%prog_dir%ztools\MtpInstallRemote.bat" +goto MAIN + +:G_INST_LOCAL +cls +call :program_logo +echo ------------------------------------------------- +echo MTP - 安装模式已激活 +echo ------------------------------------------------- +if exist "MTP1.txt" goto prevlist +goto manual_INIT +:prevlist +set conta=0 +for /f "tokens=*" %%f in (MTP1.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (MTP1.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del MTP1.txt ) +endlocal +if not exist "MTP1.txt" goto manual_INIT +ECHO ....................................................... +ECHO 找到一个上一个列表。你想要做什么? +:prevlist0 +ECHO ....................................................... +echo 输入"1",自动从上一个列表开始处理 +echo 输入"2",以删除列表并创建一个新列表 +echo 输入"3",继续建立上一个列表 +echo ....................................................... +echo 注意:按3,您将在开始处理文件之前看到上一个列表,并且可以从列表中添加和删除项目 +echo. +ECHO ************************************************* +echo 或者输入"0",返回到模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="3" goto showlist +if /i "%bs%"=="2" goto delist +if /i "%bs%"=="1" goto start_1install +if /i "%bs%"=="0" goto MAIN +echo. +echo 错误的选择 +goto prevlist0 +:delist +del MTP1.txt +cls +call :program_logo +echo ------------------------------------------------- +echo MTP - 安装模式已激活 +echo ------------------------------------------------- +echo .................................. +echo 您决定开始新的列表 +echo .................................. + +:manual_INIT +endlocal +echo “拖动其他文件或文件夹,然后按回车将项目添加到列表中” +echo. +ECHO *********************************************** +echo 输入"1",通过选择器将文件夹添加到列表 +echo 输入"2",通过选择器将文件添加到列表 +echo 输入"3",通过本地文件库,将文件添加到列表 +echo 输入"4",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"0",返回到模式选择菜单 +ECHO *********************************************** +echo. +%pycommand% "%squirrel%" -t nsp nsz xci -tfile "%prog_dir%MTP1.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" goto MAIN +if /i "%eval%"=="1" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%MTP1.txt" mode=folder ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%MTP1.txt" mode=file ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call mtp.mtpinstaller select_from_local_libraries -xarg "%prog_dir%MTP1.txt" ) +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%MTP1.txt" "extlist=nsp xci nsz xcz" ) + +goto checkagain +echo. +:checkagain +echo 你想要做什么? +echo ...................................................................... +echo ”拖动其他文件或文件夹,然后按回车将项目添加到列表中“ +echo. +echo 输入"1",开始处理 +echo 输入"2",通过选择器添加另一个文件夹到列表 +echo 输入"3",通过选择器添加另一个文件到列表 +echo 输入"4",通过本地文件库,将文件添加到列表 +echo 输入"5",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"e",退出 +echo 输入"i",以查看要处理的文件列表 +echo 输入"r",删除一些文件(从下往上数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或者输入"0",返回到模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" -t nsp nsz xci -tfile "%prog_dir%MTP1.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal + +if /i "%eval%"=="0" goto MAIN +if /i "%eval%"=="1" goto start_1install +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%MTP1.txt" mode=folder ext="nsp xci nsz" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%MTP1.txt" mode=file ext="nsp xci nsz" ) 2>&1>NUL +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call mtp.mtpinstaller select_from_local_libraries -xarg "%prog_dir%MTP1.txt" ) +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%MTP1.txt" "extlist=nsp xci nsz xcz" ) +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto showlist +if /i "%eval%"=="r" goto r_files +if /i "%eval%"=="z" del MTP1.txt + +goto checkagain + +:r_files +set /p bs="输入您要删除的文件数(从底部开始):" +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (MTP1.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:update_list1 +if !pos1! GTR !pos2! ( goto :update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :update_list1 +:update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>MTP1.txt.new +endlocal +move /y "MTP1.txt.new" "MTP1.txt" >nul +endlocal + +:showlist +cls +call :program_logo +echo ------------------------------------------------- +echo MTP - 安装模式已激活 +echo ------------------------------------------------- +ECHO 要处理的文件: +for /f "tokens=*" %%f in (MTP1.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (MTP1.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 您已添加 !conta! 个要处理的文件 +echo ................................................. +endlocal + +goto checkagain + +:s_mtp1_wrongchoice +echo 错误的选择 +echo ............ +:start_1install +echo ******************************************************* +echo 选择怎么处理这些文件 +echo ******************************************************* +echo 输入"1",安装游戏 +echo. +ECHO ****************************************** +echo 或者输入"b",以返回到列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +set choice=none +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="1" goto select_medium +if %choice%=="none" goto s_mtp1_wrongchoice + +:select_medium_wrongchoice +echo 错误的选项 +echo ............ +:select_medium +echo ******************************************************* +echo 安装介质 +echo ******************************************************* +echo. +echo 1. SD +echo 2. EMMC +echo. +ECHO ****************************************** +echo 或者输入“b”,以返回到列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +set medium=none +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="1" set "medium=SD" +if /i "%bs%"=="2" set "medium=EMMC" + +if %medium%=="none" goto select_medium_wrongchoice + +:start_installing +cls +call :program_logo +CD /d "%prog_dir%" + +%pycommand% "%squirrel%" -lib_call listmanager filter_list "%prog_dir%MTP1.txt","ext=nsp xci nsz","token=False",Print="False" +%pycommand% "%squirrel%" -lib_call mtp.mtpinstaller loop_install -xarg "%prog_dir%MTP1.txt" "destiny=%medium%" "verification=%MTP_verification%" "%w_folder%" "ch_medium=%MTP_aut_ch_medium%" "check_fw=%MTP_chk_fw%" "patch_keygen=%MTP_prepatch_kg%" "ch_base=%MTP_prechk_Base%" "ch_other=%MTP_prechk_Upd%" "install_mode=%MTP_ptch_inst_spec%" "st_crypto=%MTP_stc_installs%" + +ECHO --------------------------------------------------- +ECHO *********** 所有文件已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:F_TR +cls +call :program_logo +echo ------------------------------------------------- +echo MTP - 文件传输模式已激活 +echo ------------------------------------------------- +echo ******************************************************* +echo 选择功能 +echo ******************************************************* +echo. +echo 1. 从本地文件传输 +echo 2. 从远程库(GDRIVE)传输 +echo 3. 创建XCI和传输 +echo 4. 创建多重XCI和传输 +echo. +ECHO ****************************************** +echo 或者输入"0",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" goto F_TR_LOCAL +if /i "%bs%"=="2" goto F_TR_GD +if /i "%bs%"=="3" goto F_TR_C_xci_Transfer +if /i "%bs%"=="4" goto F_TR_C_mxci_Transfer +goto F_TR + +:F_TR_LOCAL +call "%prog_dir%ztools\MtpFTLocal.bat" +goto MAIN +:F_TR_GD +call "%prog_dir%ztools\MtpTransferRemote.bat" +goto MAIN +:F_TR_C_xci_Transfer +call "%prog_dir%ztools\MtpCxciFTLocal.bat" +goto MAIN +:F_TR_C_mxci_Transfer +call "%prog_dir%ztools\MtpCmxciFTLocal.bat" +goto MAIN + +:AUTOUPDATE +cls +call :program_logo +:select_medium_AUTOUPDATE +echo ******************************************************* +echo 安装介质 +echo ******************************************************* +echo. +echo 1. SD +echo 2. EMMC +echo. +ECHO ****************************************** +echo 或者输入”0“,返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +set medium=none +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" set "medium=SD" +if /i "%bs%"=="2" set "medium=EMMC" + +if %medium%=="none" goto select_medium_AUTOUPDATE +:set_auto_AUTOUPDATE +echo ******************************************************* +echo 自动启动安装? +echo ******************************************************* +echo. +echo 1. 在检测到新内容后开始安装 +echo 2. 选择要安装的内容 +echo. +ECHO ****************************************** +echo 输入"0",返回列表选项 +echo 输入"b",进入上一级菜单 +ECHO ****************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +set autoupd_aut=none +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" set "autoupd_aut=True" +if /i "%bs%"=="2" set "autoupd_aut=False" +if /i "%bs%"=="b" goto select_medium_AUTOUPDATE + +if %autoupd_aut%=="none" goto set_auto_AUTOUPDATE + +:set_source_AUTOUPDATE +echo ******************************************************* +echo 自动更新源 +echo ******************************************************* +echo. +echo 1. 从本地库自动更新 +echo 2. 从远程库自动更新(GOOGLE DRIVE) +echo. +ECHO ****************************************** +echo 输入"0",返回列表选项 +echo 输入"b",进入上一级菜单 +ECHO ****************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" goto AUTOUPDATE_LOCAL +if /i "%bs%"=="2" goto AUTOUPDATE_GD +if /i "%bs%"=="b" goto set_auto_AUTOUPDATE + +if %autoupd_aut%=="none" goto set_auto_AUTOUPDATE + +:AUTOUPDATE_GD +CD /d "%prog_dir%" +echo. +%pycommand% "%squirrel%" -lib_call mtp.mtp_gdrive update_console_from_gd -xarg "libraries=update" "destiny=%medium%" "exclude_xci=%MTP_exclude_xci_autinst%" "prioritize_nsz=%MTP_prioritize_NSZ%" "%prog_dir%MTP1GD.txt" "verification=%MTP_verification%" "ch_medium=%MTP_aut_ch_medium%" "ch_other=%MTP_prechk_Upd%" "autoupd_aut=%autoupd_aut%" +echo. +ECHO --------------------------------------------------- +ECHO *********** 所有文件已处理!************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:AUTOUPDATE_LOCAL +CD /d "%prog_dir%" +echo. +%pycommand% "%squirrel%" -lib_call mtp.mtpinstaller update_console -xarg "libraries=all" "destiny=%medium%" "exclude_xci=%MTP_exclude_xci_autinst%" "prioritize_nsz=%MTP_prioritize_NSZ%" "%prog_dir%MTP1.txt" "verification=%MTP_verification%" "ch_medium=%MTP_aut_ch_medium%" "ch_other=%MTP_prechk_Upd%" "autoupd_aut=%autoupd_aut%" + +echo. +ECHO --------------------------------------------------- +ECHO *********** 所有文件已处理!************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:INSTALLED +cls +call :program_logo +echo. +echo 1. DUMP安装的内容 +echo 2. 卸载内容 +echo 3. 删除游戏 +echo. +ECHO ****************************************** +echo 或者输入”0“,返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" goto dump_games +if /i "%bs%"=="2" goto uninstall_games +if /i "%bs%"=="3" goto delete_archived +goto INSTALLED + +:dump_games +echo. +ECHO ****************************************** +echo 内容转储 +ECHO ****************************************** +echo. +%pycommand% "%squirrel%" -lib_call mtp.mtp_game_manager dump_content +echo. +ECHO --------------------------------------------------- +ECHO *********** 所有文件已处理!************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:uninstall_games +echo. +ECHO ****************************************** +echo 内容卸载 +ECHO ****************************************** +echo. +%pycommand% "%squirrel%" -lib_call mtp.mtp_game_manager uninstall_content +echo. +ECHO --------------------------------------------------- +ECHO *********** 所有文件已处理!************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:delete_archived +echo. +ECHO ****************************************** +echo 删除游戏 +ECHO ****************************************** +echo. +%pycommand% "%squirrel%" -lib_call mtp.mtp_game_manager delete_archived +echo. +ECHO --------------------------------------------------- +ECHO *********** 所有文件已处理!************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:SAVES_wrongchoice +echo wrong choice +echo ............ +:SAVES +cls +call :program_logo +echo. +ECHO ****************************************** +echo 存档转储 +ECHO ****************************************** +echo. +echo 1. DUMP所有存档 +echo 2. 选择要DUMP的存档 +echo. +ECHO ****************************************** +echo 或者输入”0“,返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +set backup_all=none +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" set "backup_all=True" +if /i "%bs%"=="2" set "backup_all=False" +if /i "%bs%"=="3" goto delete_archived +if %backup_all%=="none" goto SAVES_wrongchoice + +%pycommand% "%squirrel%" -lib_call mtp.mtp_game_manager back_up_saves -xarg %backup_all% %MTP_saves_Inline% %MTP_saves_AddTIDandVer% %romaji% +echo. +ECHO --------------------------------------------------- +ECHO *********** 所有文件已处理!************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:SX_AUTOLOADER +cls +call :program_logo +echo. +ECHO ****************************************** +echo SX AUTOLOADER选项 +ECHO ****************************************** +echo. +echo 1. 为SD卡游戏生成SX自动加载器文件 +echo 2. 为HDD硬盘游戏生成SX自动加载器文件 +echo 3. 将SX自动加载器文件推送到控制台 +echo 4. 检查并清理自动加载器文件(旨在避免SD和HDD之间的冲突) +echo. +ECHO ****************************************** +echo 或者输入”0“,返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +set backup_all=none +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" ( %pycommand% "%squirrel%" -lib_call mtp.mtp_game_manager gen_sx_autoloader_sd_files ) +if /i "%bs%"=="1" goto s_exit_choice +if /i "%bs%"=="2" ( %pycommand% "%squirrel%" -lib_call mtp.mtp_tools gen_sx_autoloader_files_menu ) +if /i "%bs%"=="2" goto s_exit_choice +if /i "%bs%"=="3" ( %pycommand% "%squirrel%" -lib_call mtp.mtp_tools push_sx_autoloader_libraries ) +if /i "%bs%"=="3" goto s_exit_choice +if /i "%bs%"=="4" ( %pycommand% "%squirrel%" -lib_call mtp.mtp_tools cleanup_sx_autoloader_files ) +if /i "%bs%"=="4" goto s_exit_choice +goto SX_AUTOLOADER + +:s_exit_choice +if exist MTP1.txt del MTP1.txt +if /i "%va_exit%"=="true" echo PROGRAM WILL CLOSE NOW +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="0" goto MAIN +if /i "%bs%"=="1" goto salida +goto s_exit_choice + +:DEV_INF_wrongchoice +echo 错误的选项 +echo ............ +:DEV_INF +cls +call :program_logo +ECHO ****************************************** +echo 信息 +ECHO ****************************************** +echo 输入"1",以显示设备信息 +echo 输入"2",以显示设备上已安装的游戏和xci游戏 +echo 输入"3",以显示适用于游戏的新可用更新或DLC的列表 +echo 输入"4",以显示存档的游戏 +echo 输入"5",以显示存档游戏的新可用更新或DLC列表 +echo. +ECHO ****************************************** +echo 或者输入”0“,返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="1" goto DEV_INF2 +if /i "%bs%"=="2" goto GAMES_INSTALLED_INFO +if /i "%bs%"=="3" goto NC_AVAILABLE_INFO +if /i "%bs%"=="4" goto ARCHIVED_GAMES_INFO +if /i "%bs%"=="5" goto NC_ARCHIVED_GAMES_INFO +if /i "%bs%"=="0" goto MAIN +goto DEV_INF_wrongchoice + +:DEV_INF2 +cls +call :program_logo +echo. +"%MTP%" ShowInfo +echo. +PAUSE +goto DEV_INF + +:GAMES_INSTALLED_INFO +cls +call :program_logo +echo. +%pycommand% "%squirrel%" -lib_call mtp.mtpinstaller get_installed_info -xarg "" False +echo. +PAUSE +goto DEV_INF + +:NC_AVAILABLE_INFO +cls +call :program_logo +echo. +%pycommand% "%squirrel%" -lib_call mtp.mtpinstaller get_installed_info -xarg "" True +echo. +PAUSE +goto DEV_INF + +:ARCHIVED_GAMES_INFO +cls +call :program_logo +echo. +%pycommand% "%squirrel%" -lib_call mtp.mtpinstaller get_archived_info -xarg False +echo. +PAUSE +goto DEV_INF + +:NC_ARCHIVED_GAMES_INFO +cls +call :program_logo +echo. +%pycommand% "%squirrel%" -lib_call mtp.mtpinstaller get_archived_info -xarg True +echo. +PAUSE +goto DEV_INF + +:://///////////////////////////////////////////////// +::NSCB_options.cmd configuration script +:://///////////////////////////////////////////////// +:OPT_CONFIG +call "%batconfig%" "%op_file%" "%listmanager%" "%batdepend%" +cls +goto TOP_INIT + +:contador_MTP1 +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (MTP1.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍有 !conta! 个文件要处理 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + +:://///////////////////////////////////////////////// +::子程序 +:://///////////////////////////////////////////////// + +:squirrell +echo ,;:;;, +echo ;;;;; +echo .=', ;:;;:, +echo /_', "=. ';:;:; +echo @=:__, \,;:;:' +echo _(\.= ;:;;' +echo `"_( _/="` +echo `"' +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " A MTP MANAGER FOR DBI INSTALLER " +ECHO VERSION 1.00c (MTP) +ECHO ------------------------------------------------------------------------------------- +ECHO DBI by DUCKBILL: https://github.com/rashevskyv/switch/releases +ECHO Latest DBI: https://github.com/rashevskyv/switch/releases/tag/462 +ECHO ------------------------------------------------------------------------------------- +exit /B + +:delay +PING -n 2 127.0.0.1 >NUL 2>&1 +exit /B + +:thumbup +echo. +echo /@ +echo \ \ +echo ___\ \ +echo (__O) \ +echo (____@) \ +echo (____@) \ +echo (__o)_ \ +echo \ \ +echo. +echo 希望您玩得开心 +exit /B + +:call_main +call "%prog_dir%\NSCB.bat" +exit /B + +:salida +::pause +exit diff --git a/py/Regional/ZH/ztools/MtpTransferRemote.bat b/py/Regional/ZH/ztools/MtpTransferRemote.bat new file mode 100644 index 00000000..706e7f8d --- /dev/null +++ b/py/Regional/ZH/ztools/MtpTransferRemote.bat @@ -0,0 +1,270 @@ +@ECHO OFF +:TOP_INIT +CD /d "%prog_dir%" +set "bat_name=%~n0" +Title NSC_Builder v1.00c -- Profile: %ofile_name% -- by JulesOnTheRoad + +:MAIN +if exist "MTP2GD.txt" goto prevlist +goto manual_INIT +:prevlist +set conta=0 +for /f "tokens=*" %%f in (MTP2GD.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (MTP2GD.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del MTP2GD.txt ) +endlocal +if not exist "MTP2GD.txt" goto manual_INIT +ECHO ....................................................... +ECHO 找到一个上一个列表。你想做什么? +:prevlist0 +ECHO ....................................................... +echo 输入"1",自动从上一个列表开始处理 +echo 输入"2",以删除列表并创建一个新列表 +echo 输入"3",继续建立上一个列表 +echo ....................................................... +echo 注意:按3,您将在开始处理文件之前看到上一个列表,并且可以从列表中添加和删除项目 +echo. +ECHO ************************************************* +echo 或者输入"0",返回到模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="3" goto showlist +if /i "%bs%"=="2" goto delist +if /i "%bs%"=="1" goto START_TRANSFER +if /i "%bs%"=="0" call "%prog_dir%ztools\MtpMode.bat" +echo. +echo 错误的选择 +goto prevlist0 +:delist +del MTP2GD.txt +cls +call :program_logo +echo ------------------------------------------------- +echo MTP - 从谷歌网盘传输 +echo ------------------------------------------------- +echo .................................. +echo 您决定开始新的列表 +echo .................................. + +:manual_INIT +endlocal +cls +call :program_logo +echo ******************************************************* +echo 选择功能 +echo ******************************************************* +echo. +echo 输入"1",从缓存文件中选择文件 +echo 输入"2",通过本地文件库,将文件添加到列表 +echo 输入"3",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"c",为远程库重新生成缓存 +ECHO. +echo --- 或输入GDRIVE公共链接或1FICHIER链接 --- +echo. +ECHO ************************************************* +echo 或者输入"0",返回到模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" --mtp_eval_link "%prog_dir%MTP2GD.txt" "%uinput%" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" goto MAIN +if /i "%eval%"=="1" ( %pycommand% "%squirrel%" -lib_call picker_walker remote_select_from_cache -xarg "%prog_dir%MTP2GD.txt" ) +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call picker_walker remote_select_from_libraries -xarg "%prog_dir%MTP2GD.txt" ) +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call picker_walker remote_select_from_walker -xarg "%prog_dir%MTP2GD.txt" ) +if /i "%eval%"=="c" ( %pycommand% "%squirrel%" -lib_call workers concurrent_cache ) +echo. +goto checkagain + +:checkagain +echo 你想做什么? +echo ...................................................................... +echo “拖动其他文件或文件夹,然后按回车将项目添加到列表中” +echo. +echo 输入"1",开始安装 +echo 输入"2",以从缓存文件中选择文件 +echo 输入"3",通过本地文件库,将文件添加到列表 +echo 输入"4",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"c",为远程库重新生成缓存 +echo 输入"e",退出 +echo 输入"i",以查看要处理的文件列表 +echo 输入"r",删除一些文件(从下往上数) +echo 输入"z",删除整个列表 +ECHO. +echo --- 或输入GDRIVE公共链接或1FICHIER链接 --- +echo. +ECHO ************************************************* +echo 或者输入"0",返回到模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" --mtp_eval_link "%prog_dir%MTP2GD.txt" "%uinput%" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" goto MAIN +if /i "%eval%"=="1" goto START_TRANSFER +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call picker_walker remote_select_from_cache -xarg "%prog_dir%MTP2GD.txt" ) +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call picker_walker remote_select_from_libraries -xarg "%prog_dir%MTP2GD.txt" ) +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker remote_select_from_walker -xarg "%prog_dir%MTP2GD.txt" ) +if /i "%eval%"=="c" ( %pycommand% "%squirrel%" -lib_call workers concurrent_cache ) +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto showlist +if /i "%eval%"=="r" goto r_files +if /i "%eval%"=="z" del "%prog_dir%MTP2GD.txt" +if /i "%eval%"=="1" goto MAIN +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call mtp.mtp_gdrive select_from_libraries -xarg "%prog_dir%MTP2GD.txt" ) +echo. +goto checkagain + +:r_files +set /p bs="输入您要删除的文件数(从底部开始):" +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (MTP2GD.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:update_list1 +if !pos1! GTR !pos2! ( goto :update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :update_list1 +:update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>MTP2GD.txt.new +endlocal +move /y "MTP2GD.txt.new" "MTP2GD.txt" >nul +endlocal +:showlist +cls +call :program_logo +echo ------------------------------------------------- +echo MTP - 从谷歌网盘传输 +echo ------------------------------------------------- +ECHO 要处理的文件: +for /f "tokens=*" %%f in (MTP2GD.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (MTP2GD.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 您已添加 !conta! 个要处理的文件 +echo ................................................. +endlocal +goto checkagain + +:START_TRANSFER +cls +call :program_logo +CD /d "%prog_dir%" +%pycommand% "%squirrel%" -lib_call mtp.mtp_gdrive loop_transfer -xarg "%prog_dir%MTP2GD.txt" +echo. +ECHO --------------------------------------------------- +ECHO *********** 所有文件已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:s_exit_choice +if exist MTP2GD.txt del MTP2GD.txt +if /i "%va_exit%"=="true" echo 程序即将关闭 +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择:" +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto s_exit_choice + + +:://///////////////////////////////////////////////// +::子程序 +:://///////////////////////////////////////////////// + +:squirrell +echo ,;:;;, +echo ;;;;; +echo .=', ;:;;:, +echo /_', "=. ';:;:; +echo @=:__, \,;:;:' +echo _(\.= ;:;;' +echo `"_( _/="` +echo `"' +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " A MTP MANAGER FOR DBI INSTALLER " +ECHO VERSION 1.00c (MTP) +ECHO ------------------------------------------------------------------------------------- +ECHO DBI by DUCKBILL: https://github.com/rashevskyv/switch/releases +ECHO Latest DBI: https://github.com/rashevskyv/switch/releases/tag/462 +ECHO ------------------------------------------------------------------------------------- +exit /B + +:delay +PING -n 2 127.0.0.1 >NUL 2>&1 +exit /B + +:thumbup +echo. +echo /@ +echo \ \ +echo ___\ \ +echo (__O) \ +echo (____@) \ +echo (____@) \ +echo (__o)_ \ +echo \ \ +echo. +echo 希望您玩得开心 +exit /B + +:MAIN +call "%prog_dir%\MtpMode.bat" +exit /B + +:salida +::pause +exit diff --git a/py/Regional/ZH/ztools/NSCB_config.bat b/py/Regional/ZH/ztools/NSCB_config.bat new file mode 100644 index 00000000..6e7df3fc --- /dev/null +++ b/py/Regional/ZH/ztools/NSCB_config.bat @@ -0,0 +1,2727 @@ +:sc1 +set "op_file=%~1" +set "listmanager=%~2" +set "batdepend=%~3" +cls +call :logo +echo ******************************************************** +echo 选项-配置 +echo ******************************************************** +echo 输入"1",自动模式选项 +echo 输入"2",全局和手动模式选项 +echo 输入"3",验证密钥文件keys.txt +echo 输入"4",更新nutdb +echo 输入"5",界面选项 +echo 输入"6",服务器选项 +echo 输入"7",谷歌网盘选项 +echo 输入"8",MTP选项 +echo. +echo 输入"c",读取当前配置文件 +echo 输入"d",设置默认设置 +echo 输入"0",返回主程序 +echo ....................................................... +echo. +set /p bs="输入您的选择: " +if /i "%bs%"=="1" goto sc2 +if /i "%bs%"=="2" goto sc3 +if /i "%bs%"=="3" goto verify_keys +if /i "%bs%"=="4" goto update_nutdb +if /i "%bs%"=="5" goto interface +if /i "%bs%"=="6" goto server +if /i "%bs%"=="7" goto google_drive +if /i "%bs%"=="8" goto MTP + +if /i "%bs%"=="c" call :curr_set1 +if /i "%bs%"=="c" call :curr_set2 +if /i "%bs%"=="c" echo. +if /i "%bs%"=="c" pause + +if /i "%bs%"=="d" call :def_set1 +if /i "%bs%"=="d" call :def_set2 +if /i "%bs%"=="d" echo. +if /i "%bs%"=="d" pause + +if /i "%bs%"=="0" goto salida +echo 错误的选择 +echo. +goto sc1 + +:sc2 +cls +call :logo +echo ******************************************************** +echo 自动模式配置 +echo ******************************************************** +echo 输入"1",更改重新打包配置 +echo 输入"2",更改文件夹的处理方式 +echo 输入"3",更改RSV修补配置 +echo 输入"4",以更改密钥生成配置 +echo. +echo 输入"c",读取当前自动模式设置 +echo 输入"d",设置默认自动模式设置 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ....................................................... +echo. +set /p bs="输入您的选择: " +if /i "%bs%"=="1" goto op_repack +if /i "%bs%"=="2" goto op_pfolder +if /i "%bs%"=="3" goto op_RSV +if /i "%bs%"=="4" goto op_KGEN + +if /i "%bs%"=="c" call :curr_set1 +if /i "%bs%"=="c" echo. +if /i "%bs%"=="c" pause + +if /i "%bs%"=="d" call :def_set1 +if /i "%bs%"=="d" echo. +if /i "%bs%"=="d" pause +if /i "%bs%"=="d" goto sc1 + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida +echo 错误的选择 +echo. +goto sc2 + +:op_repack +cls +call :logo +echo ******************************************************* +echo 重新打包配置 +echo ******************************************************* +echo 自动模式选择 +echo ....................................................... +echo 输入"1",重新打包为NSP +echo 输入"2",重新打包为XCI +echo 输入"3",全部都要 +echo 输入"4",从升级包里删除增量部分 +echo 输入"5",按cnmt顺序重建NSPs +echo. +echo 输入"b",返回自动模式-配置 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ....................................................... +echo. +set /p bs="输入您的选择: " +set "v_rep=none" +if /i "%bs%"=="1" set "v_rep=nsp" +if /i "%bs%"=="2" set "v_rep=xci" +if /i "%bs%"=="3" set "v_rep=both" +if /i "%bs%"=="4" set "v_rep=nodelta" +if /i "%bs%"=="5" set "v_rep=rebuild" + +if /i "%bs%"=="b" goto sc2 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%v_rep%"=="none" echo 错误的选择 +if "%v_rep%"=="none" echo. +if "%v_rep%"=="none" goto op_repack + +set v_rep="vrepack=%v_rep%" +set v_rep="%v_rep%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "57" -nl "set %v_rep%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "57" -nl "Line in config was changed to: " +echo. +pause +goto sc2 + +:op_pfolder +cls +call :logo +echo ********************************************************************** +echo 文件夹处理 +echo ********************************************************************** +echo 如何在自动模式下处理文件夹 +echo ...................................................................... +echo 输入"1",单独重新打包文件夹的文件(单个内容文件) +echo 输入"2",将文件夹的文件重新打包在一起(多内容文件) +echo 输入"3",通过BASE ID重新打包文件夹的文件 +echo. +echo 输入"b",返回自动模式-配置 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ...................................................................... +echo. +set /p bs="输入您的选择: " +set "v_fold=none" +if /i "%bs%"=="1" set "v_fold=indiv" +if /i "%bs%"=="2" set "v_fold=multi" +if /i "%bs%"=="3" set "v_fold=baseid" + +if /i "%bs%"=="b" goto sc2 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%v_fold%"=="none" echo 错误的选择 +if "%v_fold%"=="none" echo. +if "%v_fold%"=="none" goto op_pfolder + +set v_fold="fi_rep=%v_fold%" +set v_fold="%v_fold%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "61" -nl "set %v_fold%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "61" -nl "Line in config was changed to: " +echo. +pause +goto sc2 + +:op_RSV +cls +call :logo +echo *************************************************************************** +echo 魔改所需的系统版本 +echo *************************************************************************** +echo 补丁meta NCA中为所要求的系统版本(自动模式) +echo ........................................................................... +echo 补丁所需的系统版本,以便控制台不要求更新更大的所需固件版本来解密密钥 +echo. +echo 输入"1",魔改 +echo 输入"2",不魔改 +echo. +echo 输入"b",返回自动模式-配置 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "v_RSV=none" +if /i "%bs%"=="1" set "v_RSV=-pv true" +if /i "%bs%"=="2" set "v_RSV=-pv false" + +if /i "%bs%"=="b" goto sc2 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%v_RSV%"=="none" echo 错误的选择 +if "%v_RSV%"=="none" echo. +if "%v_RSV%"=="none" goto op_RSV + +set v_RSV="patchRSV=%v_RSV%" +set v_RSV="%v_RSV%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "41" -nl "set %v_RSV%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "41" -nl "Line in config was changed to: " +echo. +pause +goto sc2 + +:op_KGEN +cls +call :logo +echo *************************************************************************** +echo 所需系统版本 +echo *************************************************************************** +echo 如果大于设定值,则更改键生成(自动模式) +echo ........................................................................... +echo 更改动态生成并重新计算密钥块,以使用较低的主密钥解密nca。 +echo. +echo 输入"f",不魔改 +echo 输入"0",魔改版本FW 1.0 +echo 输入"1",魔改版本FW 2.0-2.3 +echo 输入"2",魔改版本FW 3.0 +echo 输入"3",魔改版本FW 3.0.1-3.0.2 +echo 输入"4",魔改版本FW 4.0.0-4.1.0 +echo 输入"5",魔改版本FW 5.0.0-5.1.0 +echo 输入"6",魔改版本FW 6.0.0-6.1.0 +echo 输入"7",魔改版本FW 6.2.0 +echo 输入"8",魔改版本FW 7.0.0-7.0.1 +echo 输入"9",魔改版本FW 8.1.0 +echo 输入"10",魔改版本FW 9.0.0-9.0.1 +echo 输入"11",魔改版本FW 9.1.0 +echo. +echo 输入"b",返回自动模式-配置 +echo 输入"c",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "v_KGEN=none" +set "v_CAPRSV=0" +if /i "%bs%"=="f" set "v_KGEN=-kp false" +if /i "%bs%"=="0" set "v_KGEN=-kp 0" +if /i "%bs%"=="0" set "v_CAPRSV=--RSVcap 0" +if /i "%bs%"=="1" set "v_KGEN=-kp 1" +if /i "%bs%"=="1" set "v_CAPRSV=--RSVcap 65796" +if /i "%bs%"=="2" set "v_KGEN=-kp 2" +if /i "%bs%"=="2" set "v_CAPRSV=--RSVcap 201327002" +if /i "%bs%"=="3" set "v_KGEN=-kp 3" +if /i "%bs%"=="3" set "v_CAPRSV=--RSVcap 201392178" +if /i "%bs%"=="4" set "v_KGEN=-kp 4" +if /i "%bs%"=="4" set "v_CAPRSV=--RSVcap 268435656" +if /i "%bs%"=="5" set "v_KGEN=-kp 5" +if /i "%bs%"=="5" set "v_CAPRSV=--RSVcap 335544750" +if /i "%bs%"=="6" set "v_KGEN=-kp 6" +if /i "%bs%"=="6" set "v_CAPRSV=--RSVcap 402653494" +if /i "%bs%"=="7" set "v_KGEN=-kp 7" +if /i "%bs%"=="7" set "v_CAPRSV=--RSVcap 404750336" +if /i "%bs%"=="8" set "v_KGEN=-kp 8" +if /i "%bs%"=="8" set "v_CAPRSV=--RSVcap 469762048" +if /i "%bs%"=="9" set "v_KGEN=-kp 9" +if /i "%bs%"=="9" set "v_CAPRSV=--RSVcap 537919488" +if /i "%bs%"=="10" set "v_KGEN=-kp 10" +if /i "%bs%"=="10" set "v_CAPRSV=--RSVcap 603979776" +if /i "%bs%"=="11" set "v_KGEN=-kp 11" +if /i "%bs%"=="11" set "v_CAPRSV=--RSVcap 605028352" + +if /i "%bs%"=="b" goto sc2 +if /i "%bs%"=="c" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%v_RSV%"=="none" echo 错误的选择 +if "%v_RSV%"=="none" echo. +if "%v_RSV%"=="none" goto op_RSV + +set v_KGEN="vkey=%v_KGEN%" +set v_KGEN="%v_KGEN%" +set v_CAPRSV="capRSV=%v_CAPRSV%" +set v_CAPRSV="%v_CAPRSV%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "95" -nl "set %v_KGEN%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "42" -nl "set %v_CAPRSV%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "95" -nl "Line in config was changed to: " +%pycommand% "%listmanager%" -rl "%op_file%" -ln "42" -nl "Line in config was changed to: " +echo. +pause +goto sc2 + +:sc3 +cls +call :logo +echo ********************************************** +echo 全局选项-配置 +echo ********************************************** +echo 输入"1",更改文本和背景色 +echo 输入"2",更改工作文件夹的名称 +echo 输入"3",更改输出文件夹的名称 +echo 输入"4",更改增量文件处理 +echo 输入"5",更改zip配置 (LEGACY) +echo 输入"6",更改自动退出配置 +echo 输入"7",跳过密钥生成提示 +echo 输入"8",设置文件流缓冲区 +echo 输入"9",设置文件fat32\exfat选项 +echo 输入"10",组织输出文件 +echo 输入"11",设置新模式或旧模式 +echo 输入"12",设置罗马字母名当使用direct-multi +echo 输入"13",在文件信息中翻译游戏描述行 +echo 输入"14" to 更改工作线程数量(暂时禁用) +echo 输入"15" to 设置用户预设NSZ压缩 +echo 输入"16" to 设置压缩的XCI导出格式 +echo. +echo 输入"c",读取当前全局设置 +echo 输入"d",设置默认全局设置 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择: " + +if /i "%bs%"=="1" goto op_color +if /i "%bs%"=="2" goto op_wfolder +if /i "%bs%"=="3" goto op_ofolder +if /i "%bs%"=="4" goto op_delta +if /i "%bs%"=="5" goto op_zip +if /i "%bs%"=="6" goto op_aexit +if /i "%bs%"=="7" goto op_kgprompt +if /i "%bs%"=="8" goto op_buffer +if /i "%bs%"=="9" goto op_fat +if /i "%bs%"=="10" goto op_oforg +if /i "%bs%"=="11" goto op_nscbmode +if /i "%bs%"=="12" goto op_romanize +if /i "%bs%"=="13" goto op_translate +if /i "%bs%"=="14" goto op_threads +if /i "%bs%"=="15" goto op_NSZ1 +if /i "%bs%"=="16" goto op_NSZ3 + +if /i "%bs%"=="c" call :curr_set2 +if /i "%bs%"=="c" echo. +if /i "%bs%"=="c" pause + +if /i "%bs%"=="d" call :def_set2 +if /i "%bs%"=="d" echo. +if /i "%bs%"=="d" pause +if /i "%bs%"=="d" goto sc1 + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +echo 错误的选择 +echo. +goto sc3 + +:op_color +cls +call :logo +echo ******************************************************** +echo 颜色-配置 +echo ******************************************************** +echo -------------------------------------------------------- +echo 前景颜色(文本颜色) +echo -------------------------------------------------------- +echo 输入"1",将文本颜色更改为亮白色(默认) +echo 输入"2",将文本颜色更改为黑色 +echo 输入"3",将文本颜色更改为蓝色 +echo 输入"4",将文本颜色更改为绿色 +echo 输入"5",将文本颜色更改为水绿色 +echo 输入"6",将文本颜色更改为红色 +echo 输入"7",将文本颜色更改为紫色 +echo 输入"8",将文本颜色更改为黄色 +echo 输入"9",将文本颜色更改为白色 +echo 输入"10",将文本颜色更改为灰色 +echo 输入"11",将文本颜色更改为浅蓝色 +echo 输入"12",将文本颜色更改为浅绿色 +echo 输入"13",将文本颜色更改为浅水绿色 +echo 输入"14",将文本颜色更改为浅红色 +echo 输入"15",将文本颜色更改为浅紫色 +echo 输入"16",将文本颜色更改为浅黄色 +echo. +echo 输入"d",设置默认颜色配置 +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo. +set /p bd="输入您的选择: " + +set "v_colF=F" +if /i "%bd%"=="1" set "v_colF=F" +if /i "%bd%"=="2" set /a "v_colF=0" +if /i "%bd%"=="3" set /a "v_colF=3" +if /i "%bd%"=="4" set /a "v_colF=1" +if /i "%bd%"=="5" set /a "v_colF=2" +if /i "%bd%"=="6" set /a "v_colF=4" +if /i "%bd%"=="7" set /a "v_colF=5" +if /i "%bd%"=="8" set /a "v_colF=6" +if /i "%bd%"=="9" set /a "v_colF=7" +if /i "%bd%"=="10" set /a "v_colF=8" +if /i "%bd%"=="11" set /a "v_colF=9" +if /i "%bd%"=="12" set "v_colF=A" +if /i "%bd%"=="13" set "v_colF=B" +if /i "%bd%"=="14" set "v_colF=C" +if /i "%bd%"=="15" set "v_colF=D" +if /i "%bd%"=="16" set "v_colF=E" + +if /i "%bd%"=="d" set "v_colF=F" +if /i "%bd%"=="d" set /a "v_colB=1" +if /i "%bd%"=="d" goto do_set_col + +if /i "%bd%"=="b" goto sc3 +if /i "%bd%"=="0" goto sc1 +if /i "%bd%"=="e" goto salida + +echo ----------------------------------------------------- +echo 背景色 +echo ----------------------------------------------------- +echo 输入"1",将背景色更改为蓝色(默认) +echo 输入"2",将背景色更改为黑色 +echo 输入"3",将背景色更改为绿色 +echo 输入"4",将背景色更改为水绿色 +echo 输入"5",将背景色更改为红色 +echo 输入"6",将背景色更改为紫色 +echo 输入"7",将背景色更改为黄色 +echo 输入"8",将背景色更改为白色 +echo 输入"9",将背景色更改为灰色 +echo 输入"10",将背景色更改为亮白色 +echo 输入"11",将背景色更改为浅蓝色 +echo 输入"12",将背景色更改为浅绿色 +echo 输入"13",将背景色更改为浅水绿色 +echo 输入"14",将背景色更改为浅红色 +echo 输入"15",将背景色更改为浅紫色 +echo 输入"16",将背景色更改为浅黄色 +echo. +echo 输入"d",设置默认颜色配置 +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择: " + +set /a "v_colB=1" +if /i "%bs%"=="1" set /a "v_colB=1" +if /i "%bs%"=="2" set /a "v_colB=0" +if /i "%bs%"=="3" set /a "v_colB=2" +if /i "%bs%"=="4" set /a "v_colB=3" +if /i "%bs%"=="5" set /a "v_colB=4" +if /i "%bs%"=="6" set /a "v_colB=5" +if /i "%bs%"=="7" set /a "v_colB=6" +if /i "%bs%"=="8" set /a "v_colB=7" +if /i "%bs%"=="9" set /a "v_colB=8" +if /i "%bs%"=="10" set "v_colB=F" +if /i "%bs%"=="11" set /a "v_colB=9" +if /i "%bs%"=="12" set "v_colB=A" +if /i "%bs%"=="13" set "v_colB=B" +if /i "%bs%"=="14" set "v_colB=C" +if /i "%bs%"=="15" set "v_colB=D" +if /i "%bs%"=="16" set "v_colB=E" + +if /i "%bs%"=="d" set "v_colF=F" +if /i "%bs%"=="d" set /a "v_colB=1" +if /i "%bs%"=="d" goto do_set_col + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +:do_set_col +setlocal enabledelayedexpansion +set "v_col=!v_colB!!v_colF!" +color !v_col! +%pycommand% "%listmanager%" -cl "%op_file%" -ln "3" -nl "color !v_col!" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "3" -nl "Line in config was changed to: " +endlocal +echo. +pause +goto sc3 + +:op_wfolder +cls +call :logo +echo *********************************** +echo 工作文件夹名称-配置 +echo *********************************** +echo 输入"1",以设置默认工作文件夹的名称 +echo. +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="Or type a new name: " +set "v_wf=%bs%" +if /i "%bs%"=="1" set "v_wf=NSCB_temp" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +set v_wf="w_folder=%v_wf%" +set v_wf="%v_wf%" + +%pycommand% "%listmanager%" -cl "%op_file%" -ln "8" -nl "set %v_wf%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "8" -nl "Line in config was changed to: " +echo. +pause +goto sc3 + + +:op_ofolder +cls +call :logo +echo ************************************* +echo 输出文件夹的名称-配置 +echo ************************************* +echo 输入"1",设置默认输出文件夹的名称 +echo. +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="Or type a new name: " +set "v_of=%bs%" +if /i "%bs%"=="1" set "v_of=NSCB_output" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +set v_of="fold_output=%v_of%" +set v_of="%v_of%" + +%pycommand% "%listmanager%" -cl "%op_file%" -ln "10" -nl "set %v_of%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "10" -nl "Line in config was changed to: " +echo. +pause +goto sc3 + + +:op_delta +cls +call :logo +echo *************************************************************************** +echo 增量文件处理-配置 +echo *************************************************************************** +echo 提取更新时跳过增量NCA文件 +echo ........................................................................... +echo 增量用于将以前的更新转换为新的更新,更新可以包含完整的更新+增量。 +echo 增量部分对于xci而言是不必要的,但它们可用于安装更快的nsp并将先前的更新转换为新的更新。 +echo 没有增量更新,您的旧更新将保留在系统中,您需要将其卸载。 +echo. +echo 输入"1",跳过增量(默认配置) +echo 输入"2",重新打包Delta +echo. +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "v_delta=none" +if /i "%bs%"=="1" set "v_delta=--C_clean_ND" +if /i "%bs%"=="1" set "v_delta2_=-ND true" +if /i "%bs%"=="2" set "v_delta=--C_clean" +if /i "%bs%"=="2" set "v_delta2_=-ND false" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%v_delta%"=="none" echo 错误的选择 +if "%v_delta%"=="none" echo. +if "%v_delta%"=="none" goto op_delta + +set v_delta="nf_cleaner=%v_delta%" +set v_delta="%v_delta%" +set v_delta2_="skdelta=%v_delta2_%" +set v_delta2_="%v_delta2_%" + +%pycommand% "%listmanager%" -cl "%op_file%" -ln "36" -nl "set %v_delta%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "36" -nl "Line in config was changed to: " +echo. +%pycommand% "%listmanager%" -cl "%op_file%" -ln "37" -nl "set %v_delta2_%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "37" -nl "Line in config was changed to: " +echo. +pause +goto sc3 + +:op_zip +cls +call :logo +echo *************************************************************************** +echo zip文件生成 +echo *************************************************************************** +echo 使用键块和文件信息生成zip文件 +echo ........................................................................... +echo. +echo 输入"1",生成zip文件 +echo 输入"2",不生成zip文件(默认配置) +echo. +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "v_gzip=none" +if /i "%bs%"=="1" set "v_gzip=true" +if /i "%bs%"=="2" set "v_gzip=false" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%v_gzip%"=="none" echo 错误的选择 +if "%v_gzip%"=="none" echo. +if "%v_gzip%"=="none" goto op_zip + +set v_gzip="zip_restore=%v_gzip%" +set v_gzip="%v_gzip%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "78" -nl "set %v_gzip%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "78" -nl "Line in config was changed to: " +echo. +pause +goto sc3 + +:op_aexit +cls +call :logo +echo *************************************************************************** +echo 自动退出配置(手动模式) +echo *************************************************************************** +echo 处理完文件后自动退出或请求下一步处理。 +echo ........................................................................... +echo. +echo 输入"1",以设置自动退出(默认配置) +echo 输入"2",设置为自动退出 +echo. +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "v_exit=none" +if /i "%bs%"=="1" set "v_exit=false" +if /i "%bs%"=="2" set "v_exit=true" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%v_exit%"=="none" echo 错误的选择 +if "%v_exit%"=="none" echo. +if "%v_exit%"=="none" goto op_aexit + +set v_exit="va_exit=%v_exit%" +set v_exit="%v_exit%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "101" -nl "set %v_exit%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "101" -nl "Line in config was changed to: " +echo. +pause +goto sc3 + +:op_kgprompt +cls +call :logo +echo *************************************************************************** +echo 显示\跳过所需的系统版本和密钥生成更改属性 +echo *************************************************************************** +echo. +echo 输入"1",显示RSV提示(默认配置) +echo 输入"2",不显示RSV提示 +echo. +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "skipRSVprompt=none" +if /i "%bs%"=="1" set "skipRSVprompt=false" +if /i "%bs%"=="2" set "skipRSVprompt=true" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%skipRSVprompt%"=="none" echo 错误的选择 +if "%skipRSVprompt%"=="none" echo. +if "%skipRSVprompt%"=="none" goto op_kgprompt + +set skipRSVprompt="skipRSVprompt=%skipRSVprompt%" +set skipRSVprompt="%skipRSVprompt%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "108" -nl "set %skipRSVprompt%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "108" -nl "Line in config was changed to: " +echo. +pause +goto sc3 + +:op_buffer +cls +call :logo +echo *************************************************************************** +echo 为NSP或XCI的文件复制设置附加缓冲区 +echo *************************************************************************** +echo 此选项会影响进程的速度。理想的缓冲取决于你的系统。 +echo 默认设置为64kb +echo. +echo 输入"1",将缓冲区更改为80KB +echo 输入"2",将缓冲区更改为72kb +echo 输入"3",将缓冲区更改为64KB(默认) +echo 输入"4",将缓冲区更改为56KB +echo 输入"5",将缓冲区更改为48kb +echo 输入"6",将缓冲区更改为40KB +echo 输入"7",将缓冲区更改为32KB +echo 输入"8",将缓冲区更改为24kb +echo 输入"9",将缓冲区更改为16KB +echo 输入"10",将缓冲区更改为8kb + +echo. +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "v_buffer=none" +if /i "%bs%"=="1" set "v_buffer=-b 81920" +if /i "%bs%"=="2" set "v_buffer=-b 73728" +if /i "%bs%"=="3" set "v_buffer=-b 65536" +if /i "%bs%"=="4" set "v_buffer=-b 57344" +if /i "%bs%"=="5" set "v_buffer=-b 49152" +if /i "%bs%"=="6" set "v_buffer=-b 40960" +if /i "%bs%"=="7" set "v_buffer=-b 32768" +if /i "%bs%"=="8" set "v_buffer=-b 24576" +if /i "%bs%"=="9" set "v_buffer=-b 16384" +if /i "%bs%"=="10" set "v_buffer=-b 8192" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%v_buffer%"=="none" echo 错误的选择 +if "%v_buffer%"=="none" echo. +if "%v_buffer%"=="none" goto op_buffer + +set v_buffer="buffer=%v_buffer%" +set v_buffer="%v_buffer%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "32" -nl "set %v_buffer%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "32" -nl "Line in config was changed to: " +echo. +pause +goto sc3 + +:op_fat +cls +call :logo +echo *************************************************************************** +echo 设置将SD卡的文件系统格式 +echo *************************************************************************** +echo SX OS ROM菜单支持分割后的ns0,ns1...nsp文件:以及已归档文件夹中的00、01文件,以对应所提供的这2个选项。 +echo. +echo 输入"1",将卡格式更改为exfat(默认) +echo 输入"2",将卡格式更改为FAT32(XC0和NS0文件) +echo 输入"3",将所有CFW的卡格式更改为FAT32(存档文件夹) +echo. +echo 注意:存档文件夹选项将NSP文件份文件导出为文件夹和XCI文件。 +echo. +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "v_fat1=none" +set "v_fat2=none" +if /i "%bs%"=="1" set "v_fat1=-fat exfat" +if /i "%bs%"=="1" set "v_fat2=-fx files" +if /i "%bs%"=="2" set "v_fat1=-fat fat32" +if /i "%bs%"=="2" set "v_fat2=-fx files" +if /i "%bs%"=="3" set "v_fat1=-fat fat32" +if /i "%bs%"=="3" set "v_fat2=-fx folder" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%v_fat1%"=="none" echo 错误的选择 +if "%v_fat1%"=="none" echo. +if "%v_fat1%"=="none" goto op_fat +if "%v_fat2%"=="none" echo 错误的选择 +if "%v_fat2%"=="none" echo. +if "%v_fat2%"=="none" goto op_fat + +set v_fat1="fatype=%v_fat1%" +set v_fat1="%v_fat1%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "116" -nl "set %v_fat1%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "116" -nl "Line in config was changed to: " +echo. +set v_fat2="fexport=%v_fat2%" +set v_fat2="%v_fat2%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "117" -nl "set %v_fat2%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "117" -nl "Line in config was changed to: " +echo. +pause +goto sc3 + +:op_oforg +cls +call :logo +echo *************************************************************************** +echo 输出文件夹中输出项的组织格式 +echo *************************************************************************** +echo. +echo 输入"1",单独组织文件(默认) +echo 输入"2",组织按内容设置的文件夹中的文件 +echo. +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "v_oforg=none" +if /i "%bs%"=="1" set "v_oforg=inline" +if /i "%bs%"=="2" set "v_oforg=subfolder" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%v_oforg%"=="none" echo 错误的选择 +if "%v_oforg%"=="none" echo. +if "%v_oforg%"=="none" goto op_oforg + +set v_oforg="oforg=%v_oforg%" +set v_oforg="%v_oforg%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "125" -nl "set %v_oforg%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "125" -nl "Line in config was changed to: " +echo. +pause +goto sc3 + +:op_nscbmode +cls +call :logo +echo *************************************************************************** +echo 新模式或旧模式启动程序 +echo *************************************************************************** +echo. +echo 输入"1",以开始新模式(默认) +echo 输入"2",以从旧模式开始 +echo. +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "v_nscbmode=none" +if /i "%bs%"=="1" set "v_nscbmode=new" +if /i "%bs%"=="2" set "v_nscbmode=legacy" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%v_nscbmode%"=="none" echo 错误的选择 +if "%v_nscbmode%"=="none" echo. +if "%v_nscbmode%"=="none" goto op_nscbmode + +set v_nscbmode="NSBMODE=%v_nscbmode%" +set v_nscbmode="%v_nscbmode%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "132" -nl "set %v_nscbmode%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "132" -nl "Line in config was changed to: " +echo. +pause +goto sc3 + +:op_romanize +cls +call :logo +echo *************************************************************************** +echo 直接多功能的罗马字母结果名称 +echo *************************************************************************** +echo. +echo 输入"1",转换日文或亚洲名称到罗马文(默认) +echo 输入"2",保留读到的主流基本文件名 +echo. +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "v_roma=none" +if /i "%bs%"=="1" set "v_roma=TRUE" +if /i "%bs%"=="2" set "v_roma=FALSE" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%v_roma%"=="none" echo 错误的选择 +if "%v_roma%"=="none" echo. +if "%v_roma%"=="none" goto op_romanize + +set v_roma="romaji=%v_roma%" +set v_roma="%v_roma%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "139" -nl "set %v_roma%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "139" -nl "Line in config was changed to: " +echo. +pause +goto sc3 + +:op_translate +cls +call :logo +echo ***************************************************************************** +echo 将游戏说明行从日语,中文,韩语翻译成英语 +echo ***************************************************************************** +echo. +echo 注意:与romaji的翻译不同,NSCB向GOOGLE TRANSLATE进行API调用 +echo. +echo 输入"1",翻译描述(默认) +echo 输入"2",保留从nutdb文件里读到的描述 +echo. +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "v_trans=none" +if /i "%bs%"=="1" set "v_trans=TRUE" +if /i "%bs%"=="2" set "v_trans=FALSE" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%v_trans%"=="none" echo 错误的选择 +if "%v_trans%"=="none" echo. +if "%v_trans%"=="none" goto op_translate + +set v_trans="transnutdb=%v_trans%" +set v_trans="%v_trans%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "147" -nl "set %v_trans%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "147" -nl "Line in config was changed to: " +echo. +pause +goto sc3 + +:op_threads +cls +call :logo +echo *************************************************************************** +echo 设置线程操作的工作线程数 +echo *************************************************************************** +echo 当前用于重命名器和数据库构建模式 +echo 有关更多值,请使用文本编辑器编辑NSCB_options.cmd +echo. +echo 输入"1",使用1个线程(默认或没有激活) +echo 输入"2",使用5个线程 +echo 输入"3",使用10个线程 +echo 输入"4",使用20个线程 +echo 输入"5",使用30个线程 +echo 输入"6",使用40个线程 +echo 输入"7",使用50个线程 +echo 输入"8",使用60个线程 +echo 输入"9",使用70个线程 +echo 输入"10",使用80个线程 +echo 输入"11",使用90个线程 +echo 输入"12",使用100个线程 +echo. +echo 输入"b",返回全局选项 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "v_workers=none" +if /i "%bs%"=="1" set "v_workers=-threads 1" +if /i "%bs%"=="2" set "v_workers=-threads 5" +if /i "%bs%"=="3" set "v_workers=-threads 10" +if /i "%bs%"=="4" set "v_workers=-threads 20" +if /i "%bs%"=="5" set "v_workers=-threads 30" +if /i "%bs%"=="6" set "v_workers=-threads 40" +if /i "%bs%"=="7" set "v_workers=-threads 50" +if /i "%bs%"=="8" set "v_workers=-threads 60" +if /i "%bs%"=="9" set "v_workers=-threads 70" +if /i "%bs%"=="10" set "v_workers=-threads 80" +if /i "%bs%"=="11" set "v_workers=-threads 90" +if /i "%bs%"=="12" set "v_workers=-threads 100" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +if "%v_workers%"=="none" echo 错误的选择 +if "%v_workers%"=="none" echo. +if "%v_workers%"=="none" goto op_threads + +set v_workers="workers=%v_workers%" +set v_workers="%v_workers%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "153" -nl "set %v_workers%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "153" -nl "Line in config was changed to: " +echo. +pause +goto sc3 + +:op_NSZ1 +cls +call :logo +echo *************************************************************************** +echo 用户压缩选项 +echo *************************************************************************** +echo ************************ +echo 输入压缩级别 +echo ************************ +echo 输入1到22之间的压缩级别 +echo 注: +echo + Level 1 - 快速但压缩比小 +echo + Level 22 - 缓慢但更好的压缩比 +echo Levels 10-17 推荐 +echo. +echo 输入"b",返回全局选项 +echo 输入"x",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "v_nszlevels=none" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="x" goto sc1 +if /i "%bs%"=="e" goto salida + +set "v_nszlevels=%bs%" +set v_nszlevels="compression_lv=%v_nszlevels%" +set v_nszlevels="%v_nszlevels%" +if "%v_nszlevels%"=="none" echo 错误的选择 +if "%v_nszlevels%"=="none" echo. +if "%v_nszlevels%"=="none" goto op_NSZ1 +%pycommand% "%listmanager%" -cl "%op_file%" -ln "158" -nl "set %v_nszlevels%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "158" -nl "Line in config was changed to: " +:op_NSZ2 +echo. +echo ******************************************************* +echo 输入要使用的线程数 +echo ******************************************************* +echo 输入要在0和4之间使用的线程数 +echo 注: +echo + 通过使用线程,您可能会获得一些减速,但会降低压缩率 +echo + 22级和4个线程可能会耗尽您的内存 +echo + 建议的最大线程压缩级别为17,但会损失压缩率 +echo. +echo 输入"b",返回全局选项 +echo 输入"x",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set "v_nszthreads=none" + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="x" goto sc1 +if /i "%bs%"=="e" goto salida + +set "v_nszthreads=%bs%" +set v_nszthreads="compression_threads=%v_nszthreads%" +set v_nszthreads="%v_nszthreads%" +if "%v_nszthreads%"=="none" echo 错误的选择 +if "%v_nszthreads%"=="none" echo. +if "%v_nszthreads%"=="none" goto op_NSZ2 +%pycommand% "%listmanager%" -cl "%op_file%" -ln "159" -nl "set %v_nszthreads%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "159" -nl "Line in config was changed to: " +pause +goto sc3 +:op_NSZ3 +echo. +echo ******************************************************* +echo 导出XCI的格式 +echo ******************************************************* +echo. +echo 输入"1",导出为XCZ-超级修剪(默认值) +echo 输入"2",导出为NSZ +echo. +echo 记住,tinfoil可以同时安装两种格式,因此不建议导出为nsz。 +echo 如果您真的想将它们作为nsz,请以这种方式进行操作,以使游戏中的nca文件可恢复。 +echo 注意:当前,此还原需要首先将文件解压缩为nsp,更好的直接还原功能将很快添加进来。 + +echo.echo. +echo 输入"b",返回全局选项 +echo 输入"x",返回配置菜单 +echo 输入"e",返回主程序 +echo ........................................................................... +echo. +set "v_xcz_export=none" +set /p bs="输入您的选择: " + +if /i "%bs%"=="b" goto sc3 +if /i "%bs%"=="x" goto sc1 +if /i "%bs%"=="e" goto salida + +if /i "%bs%"=="1" set "v_xcz_export=xcz" +if /i "%bs%"=="2" set "v_xcz_export=nsz" +set v_xcz_export="xci_export=%v_xcz_export%" +set v_xcz_export="%v_xcz_export%" +if "%v_xcz_export%"=="none" echo 错误的选择 +if "%v_xcz_export%"=="none" echo. +if "%v_xcz_export%"=="none" goto op_NSZ3 +%pycommand% "%listmanager%" -cl "%op_file%" -ln "160" -nl "set %v_xcz_export%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "160" -nl "Line in config was changed to: " +pause +goto sc3 + +:def_set1 +echo. +echo **自动模式选项** +REM vrepack +set "v_rep=both" +set v_rep="vrepack=%v_rep%" +set v_rep="%v_rep%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "57" -nl "set %v_rep%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "57" -nl "Line in config was changed to: " + +REM fi_rep +set "v_fold=multi" +set v_fold="fi_rep=%v_fold%" +set v_fold="%v_fold%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "61" -nl "set %v_fold%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "61" -nl "Line in config was changed to: " + +REM v_RSV +set "v_RSV=-pv false" +set v_RSV="patchRSV=%v_RSV%" +set v_RSV="%v_RSV%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "41" -nl "set %v_RSV%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "41" -nl "Line in config was changed to: " + +REM vkey +set "v_KGEN=-kp false" +set v_KGEN="vkey=%v_KGEN%" +set v_KGEN="%v_KGEN%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "95" -nl "set %v_KGEN%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "95" -nl "Line in config was changed to: " + +exit /B + +:def_set2 +echo. +echo **全局选项** +REM OP_COLOR +set "v_colF=F" +set /a "v_colB=1" +setlocal enabledelayedexpansion +set "v_col=!v_colB!!v_colF!" +color !v_col! +%pycommand% "%listmanager%" -cl "%op_file%" -ln "3" -nl "color !v_col!" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "3" -nl "Line in config was changed to: " +endlocal + +REM w_folder +set "v_wf=NSCB_temp" +set v_wf="w_folder=%v_wf%" +set v_wf="%v_wf%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "8" -nl "set %v_wf%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "8" -nl "Line in config was changed to: " + +REM v_of +set "v_of=NSCB_output" +set v_of="fold_output=%v_of%" +set v_of="%v_of%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "10" -nl "set %v_of%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "10" -nl "Line in config was changed to: " + +REM v_delta +set "v_delta=--C_clean_ND" +set v_delta="nf_cleaner=%v_delta%" +set v_delta="%v_delta%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "36" -nl "set %v_delta%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "36" -nl "Line in config was changed to: " + +REM v_delta2 +set "v_delta2_=-ND true" +set v_delta2_="skdelta=%v_delta2_%" +set v_delta2_="%v_delta2_%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "37" -nl "set %v_delta2_%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "37" -nl "Line in config was changed to: " + +REM zip_restore +set "v_gzip=false" +set v_gzip="zip_restore=%v_gzip%" +set v_gzip="%v_gzip%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "78" -nl "set %v_gzip%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "78" -nl "Line in config was changed to: " + +REM AUTO-EXIT +set "v_exit=false" +set v_exit="va_exit=%v_exit%" +set v_exit="%v_exit%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "101" -nl "set %v_exit%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "101" -nl "Line in config was changed to: " + +REM skipRSVprompt +set "skipRSVprompt=false" +set skipRSVprompt="skipRSVprompt=%skipRSVprompt%" +set skipRSVprompt="%skipRSVprompt%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "108" -nl "set %skipRSVprompt%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "108" -nl "Line in config was changed to: " + +REM buffer +set "v_buffer=-b 65536" +set v_buffer="buffer=%v_buffer%" +set v_buffer="%v_buffer%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "32" -nl "set %v_buffer%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "32" -nl "Line in config was changed to: " + + +REM FAT format +set "v_fat1=-fat exfat" +set v_fat1="fatype=%v_fat1%" +set v_fat1="%v_fat1%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "116" -nl "set %v_fat1%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "116" -nl "Line in config was changed to: " + +set "v_fat2=-fx files" +set v_fat2="fexport=%v_fat2%" +set v_fat2="%v_fat2%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "117" -nl "set %v_fat2%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "117" -nl "Line in config was changed to: " + +REM OUTPUT ORGANIZING format +set "v_oforg=inline" +set v_oforg="oforg=%v_oforg%" +set v_oforg="%v_oforg%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "125" -nl "set %v_oforg%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "125" -nl "Line in config was changed to: " + +REM NSCB MODE +set "v_nscbmode=new" +set v_nscbmode="NSBMODE=%v_nscbmode%" +set v_nscbmode="%v_nscbmode%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "132" -nl "set %v_nscbmode%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "132" -nl "Line in config was changed to: " + +REM ROMAJI +set "v_roma=TRUE" +set v_roma="romaji=%v_roma%" +set v_roma="%v_roma%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "139" -nl "set %v_roma%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "139" -nl "Line in config was changed to: " + +REM TRANSLATE +set "v_trans=FALSE" +set v_trans="transnutdb=%v_trans%" +set v_trans="%v_trans%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "147" -nl "set %v_trans%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "147" -nl "Line in config was changed to: " + +REM WORKERS +set v_workers="workers=-threads 1" +set v_workers="%v_workers%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "153" -nl "set %v_workers%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "153" -nl "Line in config was changed to: " + +REM COMPRESSION +set "v_nszlevels=17" +set v_nszlevels="compression_lv=%v_nszlevels%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "158" -nl "set %v_nszlevels%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "158" -nl "Line in config was changed to: " +set "v_nszlevels=0" +set v_nszlevels="compression_threads=%v_nszlevels%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "159" -nl "set %v_nszlevels%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "159" -nl "Line in config was changed to: " +set "v_xcz_export=xcz" +set v_xcz_export="xci_export=%v_xcz_export%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "160" -nl "set %v_xcz_export%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "160" -nl "Line in config was changed to: " + +exit /B + +:curr_set1 +echo. +echo **当前自动模式选项** +REM vrepack +%pycommand% "%listmanager%" -rl "%op_file%" -ln "57" -nl "File repack is set to: " + +REM fi_rep +%pycommand% "%listmanager%" -rl "%op_file%" -ln "61" -nl "Folder processing is set to: " + +REM v_RSV +%pycommand% "%listmanager%" -rl "%op_file%" -ln "41" -nl "RequiredSystemVersion patching is set to: " + +REM vkey +%pycommand% "%listmanager%" -rl "%op_file%" -ln "95" -nl "Keygeneration variable is set to: " + +exit /B + +:curr_set2 +echo. +echo **当前全局选项** +REM OP_COLOR +%pycommand% "%listmanager%" -rl "%op_file%" -ln "3" -nl "Color is set to: " +endlocal + +REM w_folder +%pycommand% "%listmanager%" -rl "%op_file%" -ln "8" -nl "Work Folder is set to: " + +REM v_of +%pycommand% "%listmanager%" -rl "%op_file%" -ln "10" -nl "Output Folder is set to: " + +REM v_delta +%pycommand% "%listmanager%" -rl "%op_file%" -ln "36" -nl "Delta Skipping is set to: " + +REM v_delta2 +%pycommand% "%listmanager%" -rl "%op_file%" -ln "37" -nl "Delta Skipping (direct functions) is set to: " + +REM zip_restore +%pycommand% "%listmanager%" -rl "%op_file%" -ln "78" -nl "Zip generation is set to: " + +REM AUTO-EXIT +%pycommand% "%listmanager%" -rl "%op_file%" -ln "101" -nl "Auto-exit is set to: " + +REM skipRSVprompt +%pycommand% "%listmanager%" -rl "%op_file%" -ln "108" -nl "Skip RSV selection is set to: " + +REM buffer +%pycommand% "%listmanager%" -rl "%op_file%" -ln "32" -nl "Buffer is set to: " + +REM FAT format +%pycommand% "%listmanager%" -rl "%op_file%" -ln "116" -nl "SD File Format is set to: " +%pycommand% "%listmanager%" -rl "%op_file%" -ln "117" -nl "Split nsp format is set to: " +REM OUTPUT ORGANIZING format +%pycommand% "%listmanager%" -rl "%op_file%" -ln "125" -nl "Output organization is set to: " + +REM NSCB MODE +%pycommand% "%listmanager%" -rl "%op_file%" -ln "132" -nl "NSCB mode is set to: " + +REM ROMANIZE +%pycommand% "%listmanager%" -rl "%op_file%" -ln "139" -nl "ROMANIZE option is set to: " + +REM TRANSLATE +%pycommand% "%listmanager%" -rl "%op_file%" -ln "147" -nl "TRANSLATE option is set to: " + +REM WORKERS +%pycommand% "%listmanager%" -rl "%op_file%" -ln "153" -nl "WORKERS option is set to: " + +REM COMPRESSION +%pycommand% "%listmanager%" -rl "%op_file%" -ln "158" -nl "COMPRESSION LEVELS option is set to: " +%pycommand% "%listmanager%" -rl "%op_file%" -ln "159" -nl "COMPRESSION THREADS option is set to: " +%pycommand% "%listmanager%" -rl "%op_file%" -ln "160" -nl "COMPRESSED XCIS EXPORT option is set to: " +exit /B + +:verify_keys +cls +call :logo +echo *************************************************************************** +echo 根据正确的密钥sha256散列值验证keys.txt中的密钥 +echo *************************************************************************** + +%pycommand% "%squirrel%" -nint_keys "%dec_keys%" + +echo ........................................................................... +echo 输入"0",返回配置菜单 +echo 输入"1",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +:salida +exit /B + +:update_nutdb +cls +call :logo +echo *************************************************************************** +echo 强制NUT_DB更新 +echo *************************************************************************** + +%pycommand% "%squirrel%" -lib_call nutdb force_refresh + +echo ........................................................................... +echo 输入"0",返回配置菜单 +echo 输入"1",返回主程序 +echo ........................................................................... +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida + +:google_drive +cls +call :logo +echo ******************************************************** +echo 谷歌网盘 - 配置 +echo ******************************************************** +echo 输入"1",注册账户 +echo 输入"2",刷新远程库文件缓存 +echo. +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ....................................................... +echo. +set /p bs="输入您的选择: " +if /i "%bs%"=="1" goto op_google_drive_account +if /i "%bs%"=="2" ( %pycommand% "%squirrel%" -lib_call workers concurrent_cache ) +if /i "%bs%"=="2" goto google_drive + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida +echo 错误的选项 +echo. +goto google_drive + +:op_google_drive_account +cls +call :logo +echo *************************************************************************** +echo 注册谷歌网盘账户 +echo *************************************************************************** +echo 您需要一个certificate.json,它可以称为certificate.json或您将生成的令牌的名称.json。 +echo certificate.json可以与许多帐户一起使用以生成令牌,但是如果将其与生成该帐户的帐户使用的帐户不同,则会收到警告。 +echo 系统实现为在凭据文件夹中有许多凭据json。阅读与NSCB一起分发的文档,并了解如何获取该文件。 +echo. +echo 注意:您在此步骤中输入的名称将用于保存令牌和路径。 +echo. +echo 示例:名为"drive"的令牌将使用drive:/folder/file.nsp之类的路径 +echo. +set /p bs="输入令牌使用的完整路径: " +set "token=%bs%" +echo. +%pycommand% "%squirrel%" -lib_call Drive.Private create_token -xarg "%token%" headless="False" +pause +goto google_drive + +:interface +cls +call :logo +echo ******************************************************** +echo 自动模式 - 配置 +echo ******************************************************** +echo 输入"1",启动可视化配置 +echo 输入"2",选择浏览器来配置界面 +echo 输入"3",停用视频播放 +echo 输入"4",设置端口 +echo 输入"5",设置主机 +echo 输入"6",设置GUI控制台参数 +echo. +echo 输入"d",还原默认界面配置 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ....................................................... +echo. +set /p bs="输入您的选择: " +if /i "%bs%"=="1" goto op_interface_consolevisibility +if /i "%bs%"=="2" goto op_interface_browser +if /i "%bs%"=="3" goto op_interface_video_playback +if /i "%bs%"=="4" goto op_interface_port +if /i "%bs%"=="5" goto op_interface_host +if /i "%bs%"=="6" goto op_interface_noconsole + +if /i "%bs%"=="d" goto op_interface_defaults +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida +echo 错误的选择 +echo. +goto interface + +:op_interface_consolevisibility +cls +call :logo +echo *************************************************************************** +echo 启动INTERFACE.BAT最小化? +echo *************************************************************************** +echo 控制调试控制台是否与Web界面一起最小化启动 +echo 界面 +echo. +echo 输入"1",开始最小化 +echo 输入"2",不开始最小化 +echo 输入"D",默认(未最小化) +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回界面菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择: " +set "v_interface=none" +if /i "%bs%"=="1" set "v_interface=yes" +if /i "%bs%"=="2" set "v_interface=no" +if /i "%bs%"=="d" set "v_interface=no" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto interface +if /i "%bs%"=="e" goto salida + +if "%v_interface%"=="none" echo 错误的选择 +if "%v_interface%"=="none" echo. +if "%v_interface%"=="none" goto op_interface_consolevisibility + +set v_interface="start_minimized=%v_interface%" +set v_interface="%v_interface%" +%pycommand% "%listmanager%" -cl "%opt_interface%" -ln "17" -nl "set %v_interface%" +echo. +%pycommand% "%listmanager%" -rl "%opt_interface%" -ln "17" -nl "Line in config was changed to: " +echo. +pause +goto interface + +:op_interface_browser +cls +call :logo +echo *************************************************************************** +echo 选择浏览器以启动界面 +echo *************************************************************************** +echo 选择用于启动界面的浏览器: +echo 选项: +echo 1. 自动。顺序是在ztools\chromium或系统中安装的浏览器的基础上设置的。 +echo 这是由squirrel按以下顺序自动设置的: +echo I. ztools\chromium(Chromium便携版或Slimjet便携版) +echo II. 系统中安装的Chrome或Chromium +echo III. Microsoft Edge (不推荐) +echo 2. 系统默认。使用默认系统浏览器(兼容性低) +echo 3. 通过以下方法之一将原始路径设置为纯chromium浏览器。 +echo I. 浏览器的绝对路径,以.exe结尾 +echo II. .lnk文件的绝对路径(Windows快捷方式) +echo III. ztools\chromium中的.lnk文件的名称(以.lnk结尾) +echo 例如: brave.lnk +echo 这将读取ztools\chromium\brave.lnk并重定向到启动brave浏览器的exe路径 +echo. +echo 输入"1"或"d",设置变量为自动 +echo 输入"2",设置变量为系统默认 +echo 输入3.III方法的shortcut.lnk名称 +echo 输入浏览器或3.I或3.II方法的快捷方式的绝对路径 +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回界面菜单 +echo 输入"e",返回朱谌旭 +echo. +set /p bs="输入您的选择: " +set "v_interface_browser=%bs%" +if /i "%bs%"=="1" set "v_interface_browser=auto" +if /i "%bs%"=="2" set "v_interface_browser=default" +if /i "%bs%"=="d" set "v_interface_browser=auto" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto interface +if /i "%bs%"=="e" goto salida + +set v_interface_browser="browserpath=%v_interface_browser%" +set v_interface_browser="%v_interface_browser%" + +%pycommand% "%listmanager%" -cl "%opt_interface%" -ln "31" -nl "set %v_interface_browser%" +echo. +%pycommand% "%listmanager%" -rl "%opt_interface%" -ln "31" -nl "Line in config was changed to: " +echo. +pause +goto interface + +:op_interface_video_playback +cls +call :logo +echo *************************************************************************** +echo 停用视频播放 +echo *************************************************************************** +echo 停用Nintendo.com视频的HLS播放器。 +echo 这适用于HLS javascript播放器不能正常工作的旧计算机 +echo. +echo 输入"1",自用视频播放 +echo 输入"2",停用视频播放 +echo 输入"D",默认(不最小化) +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回界面菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择: " +set "v_video_playback=none" +if /i "%bs%"=="1" set "v_video_playback=true" +if /i "%bs%"=="2" set "v_video_playback=false" +if /i "%bs%"=="d" set "v_video_playback=false" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto interface +if /i "%bs%"=="e" goto salida + +if "%v_video_playback%"=="none" echo 错误的选项 +if "%v_video_playback%"=="none" echo. +if "%v_video_playback%"=="none" goto op_interface_video_playback + +set v_video_playback="videoplayback=%v_video_playback%" +set v_video_playback="%v_video_playback%" +%pycommand% "%listmanager%" -cl "%opt_interface%" -ln "35" -nl "set %v_video_playback%" +echo. +%pycommand% "%listmanager%" -rl "%opt_interface%" -ln "35" -nl "Line in config was changed to: " +echo. +pause +goto interface + +:op_interface_port +cls +call :logo +echo *************************************************************************** +echo 选择界面端口 +echo *************************************************************************** +echo. +echo 注意,"rg8000"指位于8000和8999之间的开放端口, 它允许同时打开多个界面窗口。这是默认参数 +echo. +echo 输入"1"或"d",设置端口变量为rg8000 +echo 或输入一个端口号 +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回界面菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_interface_port=%bs%" +if /i "%bs%"=="1" set "v_interface_port=rg8000" +if /i "%bs%"=="d" set "v_interface_port=rg8000" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto interface +if /i "%bs%"=="e" goto salida + +set v_interface_port="port=%v_interface_port%" +set v_interface_port="%v_interface_port%" + +%pycommand% "%listmanager%" -cl "%opt_interface%" -ln "48" -nl "set %v_interface_port%" +echo. +%pycommand% "%listmanager%" -rl "%opt_interface%" -ln "48" -nl "Line in config was changed to: " +echo. +pause +goto interface + +:op_interface_host +cls +call :logo +echo *************************************************************************** +echo 选择界面端口 +echo *************************************************************************** +echo Localhost. 界面仅在本地可见(默认) +echo 0.0.0.0. 界面可以在同一网络上可见 +echo. +echo 输入"1"或"d",设置主机为LOCALHOST +echo 输入"2",设置主机为0.0.0.0 +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回界面菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_interface_host=none" +if /i "%bs%"=="1" set "v_interface_host=localhost" +if /i "%bs%"=="2" set "v_interface_host=0.0.0.0" +if /i "%bs%"=="d" set "v_interface_host=localhost" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto interface +if /i "%bs%"=="e" goto salida + +if "%v_interface_host%"=="none" echo 错误的选项 +if "%v_interface_host%"=="none" echo. +if "%v_interface_host%"=="none" goto op_interface_host + +set v_interface_host="host=%v_interface_host%" +set v_interface_host="%v_interface_host%" +%pycommand% "%listmanager%" -cl "%opt_interface%" -ln "55" -nl "set %v_interface_host%" +echo. +%pycommand% "%listmanager%" -rl "%opt_interface%" -ln "55" -nl "Line in config was changed to: " +echo. +pause +goto interface + +:op_interface_noconsole +cls +call :logo +echo *************************************************************************** +echo 隐藏界面的控制台 +echo *************************************************************************** +echo NoConsole=True. 隐藏命令控制台并将控制台打印重定向到界面,这是默认参数。 +echo NoConsole=False. 显示命令控制台 +echo. +echo 输入"1"或"d",配置NOCONSOLE为TRUE +echo 输入"2",配置NOCONSOLE为FALSE +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回界面菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_interface_noconsole=none" +if /i "%bs%"=="1" set "v_interface_noconsole=true" +if /i "%bs%"=="2" set "v_interface_noconsole=false" +if /i "%bs%"=="d" set "v_interface_noconsole=true" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto interface +if /i "%bs%"=="e" goto salida + +if "%v_interface_noconsole%"=="none" echo 错误的选项 +if "%v_interface_noconsole%"=="none" echo. +if "%v_interface_noconsole%"=="none" goto op_interface_noconsole + +set v_interface_noconsole="noconsole=%v_interface_noconsole%" +set v_interface_noconsole="%v_interface_noconsole%" +%pycommand% "%listmanager%" -cl "%opt_interface%" -ln "61" -nl "set %v_interface_noconsole%" +echo. +%pycommand% "%listmanager%" -rl "%opt_interface%" -ln "61" -nl "Line in config was changed to: " +echo. +pause +goto interface + +:op_interface_defaults +cls +call :logo +::启动 +set v_interface="start_minimized=no" +set v_interface="%v_interface%" +%pycommand% "%listmanager%" -cl "%opt_interface%" -ln "17" -nl "set %v_interface%" +%pycommand% "%listmanager%" -rl "%opt_interface%" -ln "17" -nl "Line in config was changed to: " +echo. +::浏览器路径 +set v_interface_browser="browserpath=auto" +set v_interface_browser="%v_interface_browser%" +%pycommand% "%listmanager%" -cl "%opt_interface%" -ln "31" -nl "set %v_interface_browser%" +%pycommand% "%listmanager%" -rl "%opt_interface%" -ln "31" -nl "Line in config was changed to: " +echo. +::视频播放 +set v_video_playback="videoplayback=true" +set v_video_playback="%v_video_playback%" +%pycommand% "%listmanager%" -cl "%opt_interface%" -ln "35" -nl "set %v_video_playback%" +%pycommand% "%listmanager%" -rl "%opt_interface%" -ln "35" -nl "Line in config was changed to: " +::端口 +set v_interface_port="port=rg8000" +set v_interface_port="%v_interface_port%" +%pycommand% "%listmanager%" -cl "%opt_interface%" -ln "48" -nl "set %v_interface_port%" +%pycommand% "%listmanager%" -rl "%opt_interface%" -ln "48" -nl "Line in config was changed to: " +::主机 +set v_interface_host="host=localhost" +set v_interface_host="%v_interface_host%" +%pycommand% "%listmanager%" -cl "%opt_interface%" -ln "55" -nl "set %v_interface_host%" +%pycommand% "%listmanager%" -rl "%opt_interface%" -ln "55" -nl "Line in config was changed to: " + +::GUI控制台 +set v_interface_noconsole="noconsole=true" +set v_interface_noconsole="%v_interface_noconsole%" +%pycommand% "%listmanager%" -cl "%opt_interface%" -ln "61" -nl "set %v_interface_noconsole%" +%pycommand% "%listmanager%" -rl "%opt_interface%" -ln "61" -nl "Line in config was changed to: " +pause +goto sc1 + +:server +cls +call :logo +echo ******************************************************** +echo 服务器 - 配置 +echo ******************************************************** +echo 输入"1",修改启动可视化配置 +echo 输入"2",禁止视频播放 +echo 输入"3",设置端口号 +echo 输入"4",设置主机 +echo 输入"5",设置GUI控制台参数 +echo 输入"6",设置SSL参数 +echo. +echo 输入"d",恢复服务器默认配置 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ....................................................... +echo. +set /p bs="输入您的选择:" +if /i "%bs%"=="1" goto op_server_consolevisibility +if /i "%bs%"=="2" goto op_server_video_playback +if /i "%bs%"=="3" goto op_server_port +if /i "%bs%"=="4" goto op_server_host +if /i "%bs%"=="5" goto op_server_noconsole +if /i "%bs%"=="6" goto op_server_ssl + +if /i "%bs%"=="d" goto op_server_defaults +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida +echo 错误的选项 +echo. +goto server + +:op_server_consolevisibility +cls +call :logo +echo *************************************************************************** +echo 启动SERVER.BAT最小化? +echo *************************************************************************** +echo 控制调试控制台是否与Web界面一起最小化启动 +echo. +echo 输入"1",最小化启动 +echo 输入"2",正常启动 +echo 输入"d",默认(非最小化启动) +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回服务器菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_server_vis=none" +if /i "%bs%"=="1" set "v_server_vis=yes" +if /i "%bs%"=="2" set "v_server_vis=no" +if /i "%bs%"=="d" set "v_server_vis=no" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto server +if /i "%bs%"=="e" goto salida + +if "%v_server_vis%"=="none" echo 错误的选项 +if "%v_server_vis%"=="none" echo. +if "%v_server_vis%"=="none" goto op_server_consolevisibility + +set v_server_vis="start_minimized=%v_server_vis%" +set v_server_vis="%v_server_vis%" +%pycommand% "%listmanager%" -cl "%opt_server%" -ln "17" -nl "set %v_server_vis%" +echo. +%pycommand% "%listmanager%" -rl "%opt_server%" -ln "17" -nl "Line in config was changed to: " +echo. +pause +goto server + +:op_server_video_playback +cls +call :logo +echo *************************************************************************** +echo 禁用视频播放 +echo *************************************************************************** +echo 禁用HLS播放器播放Nintendo.com视频。 +echo 这适用于可能会因HLS javascript播放器卡住的旧计算机 +echo. +echo 输入"1",启用视频播放 +echo 输入"2",禁用视频播放 +echo 输入"d",默认(启用) +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回服务器菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_video_playback=none" +if /i "%bs%"=="1" set "v_video_playback=true" +if /i "%bs%"=="2" set "v_video_playback=false" +if /i "%bs%"=="d" set "v_video_playback=false" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto server +if /i "%bs%"=="e" goto salida + +if "%v_video_playback%"=="none" echo 错误的选项 +if "%v_video_playback%"=="none" echo. +if "%v_video_playback%"=="none" goto op_server_video_playback + +set v_video_playback="videoplayback=%v_video_playback%" +set v_video_playback="%v_video_playback%" +%pycommand% "%listmanager%" -cl "%opt_server%" -ln "21" -nl "set %v_video_playback%" +echo. +%pycommand% "%listmanager%" -rl "%opt_server%" -ln "21" -nl "Line in config was changed to: " +echo. +pause +goto server + +:op_server_port +cls +call :logo +echo *************************************************************************** +echo 选择服务器端口 +echo *************************************************************************** +echo. +echo 注意:“rg8000”位于8000和8999之间的开放端口上,它允许同时打开多个接口窗口。这是默认参数。 +echo. +echo 输入"1"或"d",设置变量为rg8000 +echo 或者输入一个端口号 +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回服务器菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_server_port=%bs%" +if /i "%bs%"=="1" set "v_server_port=rg8000" +if /i "%bs%"=="d" set "v_server_port=rg8000" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto server +if /i "%bs%"=="e" goto salida + +set v_server_port="port=%v_server_port%" +set v_server_port="%v_server_port%" + +%pycommand% "%listmanager%" -cl "%opt_server%" -ln "29" -nl "set %v_server_port%" +echo. +%pycommand% "%listmanager%" -rl "%opt_server%" -ln "29" -nl "Line in config was changed to: " +echo. +pause +goto server + +:op_server_host +cls +call :logo +echo *************************************************************************** +echo 配置界面主机 +echo *************************************************************************** +echo Localhost. 服务器仅在本地可见(默认) +echo 0.0.0.0. 界面可以在同一网络上可见 +echo. +echo 输入"1"或"d",设置主机为LOCALHOST +echo 输入"2",设置主机为0.0.0.0 +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回服务器菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_server_host=none" +if /i "%bs%"=="1" set "v_server_host=localhost" +if /i "%bs%"=="2" set "v_server_host=0.0.0.0" +if /i "%bs%"=="d" set "v_server_host=localhost" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto server +if /i "%bs%"=="e" goto salida + +if "%v_server_host%"=="none" echo 错误的选项 +if "%v_server_host%"=="none" echo. +if "%v_server_host%"=="none" goto op_server_host + +set v_server_host="host=%v_server_host%" +set v_server_host="%v_server_host%" +%pycommand% "%listmanager%" -cl "%opt_server%" -ln "36" -nl "set %v_server_host%" +echo. +%pycommand% "%listmanager%" -rl "%opt_server%" -ln "36" -nl "Line in config was changed to: " +echo. +pause +goto server + +:op_server_noconsole +cls +call :logo +echo *************************************************************************** +echo 隐藏服务器的控制台 +echo *************************************************************************** +echo NoConsole=True. 隐藏命令控制台并将控制台打印重定向到服务器,这是默认参数。 +echo NoConsole=False. 显示命令控制台 +echo. +echo 输入"1"或"d",设置NOCONSOLE为TRUE +echo 输入"2",设置NOCONSOLE为FALSE +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回服务器菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_server_noconsole=none" +if /i "%bs%"=="1" set "v_server_noconsole=true" +if /i "%bs%"=="2" set "v_server_noconsole=false" +if /i "%bs%"=="d" set "v_server_noconsole=true" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto server +if /i "%bs%"=="e" goto salida + +if "%v_server_noconsole%"=="none" echo 错误的选项 +if "%v_server_noconsole%"=="none" echo. +if "%v_server_noconsole%"=="none" goto op_server_noconsole + +set v_server_noconsole="noconsole=%v_server_noconsole%" +set v_server_noconsole="%v_server_noconsole%" +%pycommand% "%listmanager%" -cl "%opt_server%" -ln "42" -nl "set %v_server_noconsole%" +echo. +%pycommand% "%listmanager%" -rl "%opt_server%" -ln "42" -nl "Line in config was changed to: " +echo. +pause +goto server + +:op_server_ssl +cls +call :logo +echo *************************************************************************** +echo SSL协议 +echo *************************************************************************** +echo 如果为true,则服务器将使用https协议; +echo 如果zconfig中存在正确签名的certificate.pem和key.pem文件,则可以使用该服务器。 +echo 如果找不到这些文件,squirrel将回退到http。 +echo. +echo 输入"1"或"D",设置SSL为OFF(默认) +echo 输入"2",设置SSL为ON +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回服务器菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_server_SSL=none" +if /i "%bs%"=="1" set "v_server_SSL=false" +if /i "%bs%"=="2" set "v_server_SSL=true" +if /i "%bs%"=="d" set "v_server_SSL=false" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto server +if /i "%bs%"=="e" goto salida + +if "%v_server_SSL%"=="none" echo 错误的选项 +if "%v_server_SSL%"=="none" echo. +if "%v_server_SSL%"=="none" goto op_server_ssl + +set v_server_SSL="ssl=%v_server_SSL%" +set v_server_SSL="%v_server_SSL%" +%pycommand% "%listmanager%" -cl "%opt_server%" -ln "48" -nl "set %v_server_SSL%" +echo. +%pycommand% "%listmanager%" -rl "%opt_server%" -ln "48" -nl "Line in config was changed to: " +echo. +pause +goto server + +:op_server_defaults +cls +call :logo +::启动 +set v_interface="start_minimized=no" +set v_interface="%v_interface%" +%pycommand% "%listmanager%" -cl "%opt_server%" -ln "17" -nl "set %v_interface%" +%pycommand% "%listmanager%" -rl "%opt_server%" -ln "17" -nl "Line in config was changed to: " +echo. +::视频播放 +set v_video_playback="videoplayback=true" +set v_video_playback="%v_video_playback%" +%pycommand% "%listmanager%" -cl "%opt_server%" -ln "21" -nl "set %v_video_playback%" +%pycommand% "%listmanager%" -rl "%opt_server%" -ln "21" -nl "Line in config was changed to: " +::端口 +set v_interface_port="port=rg8000" +set v_interface_port="%v_interface_port%" +%pycommand% "%listmanager%" -cl "%opt_server%" -ln "29" -nl "set %v_interface_port%" +%pycommand% "%listmanager%" -rl "%opt_server%" -ln "29" -nl "Line in config was changed to: " +::主机 +set v_interface_host="host=localhost" +set v_interface_host="%v_interface_host%" +%pycommand% "%listmanager%" -cl "%opt_server%" -ln "36" -nl "set %v_interface_host%" +%pycommand% "%listmanager%" -rl "%opt_server%" -ln "36" -nl "Line in config was changed to: " +::GUI控制台 +set v_interface_noconsole="noconsole=true" +set v_interface_noconsole="%v_interface_noconsole%" +%pycommand% "%listmanager%" -cl "%opt_server%" -ln "42" -nl "set %v_interface_noconsole%" +%pycommand% "%listmanager%" -rl "%opt_server%" -ln "42" -nl "Line in config was changed to: " +::SSL +set v_server_SSL="ssl=false" +set v_server_SSL="%v_server_SSL%" +%pycommand% "%listmanager%" -cl "%opt_server%" -ln "48" -nl "set %v_server_SSL%" +%pycommand% "%listmanager%" -rl "%opt_server%" -ln "48" -nl "Line in config was changed to: " + +pause +goto sc1 + +:MTP +cls +call :logo +echo ******************************************************** +echo MTP - 配置 +echo ******************************************************** +echo 输入"1",为预装设置校验 +echo 输入"2",自动更新设备时优先选择NSZ +echo 输入"3",激活标准加密安装 +echo 输入"4",在自动更新中安装更新时排除XCI +echo 输入"5",SD和EMMC之间的切换取决于可用空间 +echo 输入"6",安装前检查控制台上的固件 +echo 输入"7",必要时修补文件的密钥生成 +echo 输入"8",请在安装前检查是否已安装基本内容 +echo 输入"9",在安装前检查是否安装了旧的更新或DLC +echo 输入"10",在转储时选择文件夹设置 +echo 输入"11",在转储存档时,选择是否添加titleid和版本信息 +echo 输入"12",选择如何将文件添加到公共链接的远程高速缓存 +echo 输入"13",更改补丁文件和XCI安装规范 +echo. +echo 输入"d",恢复MTP默认配置 +echo 输入"0",返回配置菜单 +echo 输入"e",返回主程序 +echo ....................................................... +echo. +set /p bs="输入您的选择:" +if /i "%bs%"=="1" goto op_MTP_verification +if /i "%bs%"=="2" goto op_MTP_prioritize_NSZ +if /i "%bs%"=="3" goto op_MTP_standard_crypto +if /i "%bs%"=="4" goto op_MTP_exclude_xci_autinst +if /i "%bs%"=="5" goto op_MTP_aut_ch_medium +if /i "%bs%"=="6" goto op_MTP_chk_fw +if /i "%bs%"=="7" goto op_MTP_prepatch_kg +if /i "%bs%"=="8" goto op_MTP_prechk_Base +if /i "%bs%"=="9" goto op_MTP_prechk_Upd +if /i "%bs%"=="10" goto op_MTP_saves_Inline +if /i "%bs%"=="11" goto op_MTP_saves_AddTIDandVer +if /i "%bs%"=="12" goto op_MTP_pdrive_truecopy +if /i "%bs%"=="13" goto op_MTP_ptch_install_spec + +if /i "%bs%"=="d" goto op_mtp_defaults +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="e" goto salida +echo 错误的选项 +echo. +goto MTP + +:op_MTP_verification +cls +call :logo +echo *************************************************************************** +echo 激活文件校验预安装 +echo *************************************************************************** +echo False: 禁用校验 +echo Level 2 verification: NCA可读,没有文件丢失,titlekey是正确的,并且签名1来自合法可验证的来源。(默认) +echo Hash: Level 2验证 + Hash验证 +echo. +echo 输入"1"或"D",设置VERIFICATION为LEVEL2 +echo 输入"2",设置VERIFICATION为HASH +echo 输入"3",禁用校验 +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回MTP配置 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_mtp_verification=none" +if /i "%bs%"=="1" set "v_mtp_verification=True" +if /i "%bs%"=="2" set "v_mtp_verification=Hash" +if /i "%bs%"=="3" set "v_mtp_verification=False" +if /i "%bs%"=="d" set "v_mtp_verification=True" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto MTP +if /i "%bs%"=="e" goto salida + +if "%v_mtp_verification%"=="none" echo 错误的选项 +if "%v_mtp_verification%"=="none" echo. +if "%v_mtp_verification%"=="none" goto op_MTP_verification + +set v_mtp_verification="MTP_verification=%v_mtp_verification%" +set v_mtp_verification="%v_mtp_verification%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "166" -nl "set %v_mtp_verification%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "166" -nl "Line in config was changed to: " +echo. +pause +goto MTP + +:op_MTP_prioritize_NSZ +cls +call :logo +echo *************************************************************************** +echo 在检查库中的新更新和DLC时,将选择NSZ优先于NSP +echo *************************************************************************** +echo. +echo 输入"1"或"D",优先选择NSZ +echo 输入"2",不优先选择NSZ +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回MTP配置 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_MTP_prioritize_NSZ=none" +if /i "%bs%"=="1" set "v_MTP_prioritize_NSZ=True" +if /i "%bs%"=="3" set "v_MTP_prioritize_NSZ=False" +if /i "%bs%"=="d" set "v_MTP_prioritize_NSZ=True" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto MTP +if /i "%bs%"=="e" goto salida + +if "%v_MTP_prioritize_NSZ%"=="none" echo 错误的选择 +if "%v_MTP_prioritize_NSZ%"=="none" echo. +if "%v_MTP_prioritize_NSZ%"=="none" goto op_MTP_prioritize_NSZ + +set v_MTP_prioritize_NSZ="MTP_prioritize_NSZ=%v_MTP_prioritize_NSZ%" +set v_MTP_prioritize_NSZ="%v_MTP_prioritize_NSZ%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "167" -nl "set %v_MTP_prioritize_NSZ%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "167" -nl "Line in config was changed to: " +echo. +pause +goto MTP + +:op_MTP_exclude_xci_autinst +cls +call :logo +echo *************************************************************************** +echo 从自动更新检查中排除XCI以获取新内容 +echo *************************************************************************** +echo. +echo 输入"1"或"D",从自动更新检查中排除XCI +echo 输入"2",不从自动更新检查中排除XCI +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回MTP配置 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_MTP_exclude_xci_autinst=none" +if /i "%bs%"=="1" set "v_MTP_exclude_xci_autinst=True" +if /i "%bs%"=="2" set "v_MTP_exclude_xci_autinst=False" +if /i "%bs%"=="d" set "v_MTP_exclude_xci_autinst=True" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto MTP +if /i "%bs%"=="e" goto salida + +if "%v_MTP_exclude_xci_autinst%"=="none" echo 错误的选项 +if "%v_MTP_exclude_xci_autinst%"=="none" echo. +if "%v_MTP_exclude_xci_autinst%"=="none" goto op_MTP_exclude_xci_autinst + +set v_MTP_exclude_xci_autinst="MTP_exclude_xci_autinst=%v_MTP_exclude_xci_autinst%" +set v_MTP_exclude_xci_autinst="%v_MTP_exclude_xci_autinst%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "168" -nl "set %v_MTP_exclude_xci_autinst%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "168" -nl "Line in config was changed to: " +echo. +pause +goto MTP + +:op_MTP_aut_ch_medium +cls +call :logo +echo *************************************************************************** +echo 根据设备上的空间自动更改介质 +echo *************************************************************************** +echo 当所选介质中的空间不足时,如果SD和EMMC之间为true,则更改。如果为false,则跳过安装。 +echo. +echo 输入"1"或"D",根据设备上的空间更改介质 +echo 输入"2",不根据设备上的空间更改介质 +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回MTP配置 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_MTP_aut_ch_medium=none" +if /i "%bs%"=="1" set "v_MTP_aut_ch_medium=True" +if /i "%bs%"=="2" set "v_MTP_aut_ch_medium=False" +if /i "%bs%"=="d" set "v_MTP_aut_ch_medium=True" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto MTP +if /i "%bs%"=="e" goto salida + +if "%v_MTP_aut_ch_medium%"=="none" echo 错误的选项 +if "%v_MTP_aut_ch_medium%"=="none" echo. +if "%v_MTP_aut_ch_medium%"=="none" goto op_MTP_aut_ch_medium + +set v_MTP_aut_ch_medium="MTP_aut_ch_medium=%v_MTP_aut_ch_medium%" +set v_MTP_aut_ch_medium="%v_MTP_aut_ch_medium%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "169" -nl "set %v_MTP_aut_ch_medium%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "169" -nl "Line in config was changed to: " +echo. +pause +goto MTP + +:op_MTP_chk_fw +cls +call :logo +echo *************************************************************************** +echo 检查设备上和文件上的固件 +echo *************************************************************************** +echo. +echo 输入"1"或"D",不检查固件(默认) +echo 输入"2",检查固件 +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回MTP配置 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_MTP_chk_fw=none" +if /i "%bs%"=="1" set "v_MTP_chk_fw=False" +if /i "%bs%"=="2" set "v_MTP_chk_fw=True" +if /i "%bs%"=="d" set "v_MTP_chk_fw=False" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto MTP +if /i "%bs%"=="e" goto salida + +if "%v_MTP_chk_fw%"=="none" echo 错误的选项 +if "%v_MTP_chk_fw%"=="none" echo. +if "%v_MTP_chk_fw%"=="none" goto op_MTP_chk_fw + +set v_MTP_chk_fw="MTP_chk_fw=%v_MTP_chk_fw%" +set v_MTP_chk_fw="%v_MTP_chk_fw%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "170" -nl "set %v_MTP_chk_fw%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "170" -nl "Line in config was changed to: " +echo. +pause +goto MTP + +:op_MTP_prepatch_kg +cls +call :logo +echo *************************************************************************** +echo 检查设备上和文件上的固件 +echo *************************************************************************** +echo 在控制台上检查固件和文件后,hte程序将基于此选项决定是否应修补或跳过文件。 +echo 注意:目前,在通过MTP推送文件之前,需要先生成一个新文件,因为尚未在mtp挂钩上实现动态修补流的功能。 +echo. +echo 输入"1"或"D",不对文件打补丁(默认) +echo 输入"2",对文件打补丁 +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回MTP配置 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_MTP_prepatch_kg=none" +if /i "%bs%"=="1" set "v_MTP_prepatch_kg=False" +if /i "%bs%"=="2" set "v_MTP_prepatch_kg=True" +if /i "%bs%"=="d" set "v_MTP_prepatch_kg=False" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto MTP +if /i "%bs%"=="e" goto salida + +if "%v_MTP_prepatch_kg%"=="none" echo 错误的选项 +if "%v_MTP_prepatch_kg%"=="none" echo. +if "%v_MTP_prepatch_kg%"=="none" goto op_MTP_prepatch_kg + +set v_MTP_prepatch_kg="MTP_chk_fw=%v_MTP_prepatch_kg%" +set v_MTP_prepatch_kg="%v_MTP_prepatch_kg%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "171" -nl "set %v_MTP_prepatch_kg%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "171" -nl "Line in config was changed to: " +echo. +pause +goto MTP + +:op_MTP_prechk_Base +cls +call :logo +echo *************************************************************************** +echo 检查是否已在设备中安装基本游戏 +echo *************************************************************************** +echo 如果设备中装有基本游戏,则如果激活,将跳过安装。如果取消激活,安装将被覆盖。 +echo. +echo 输入"1"或"D",已安装检查和跳过游戏(默认) +echo 输入"2",不检查并跳过已安装的游戏 +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回MTP配置 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_MTP_prechk_Base=none" +if /i "%bs%"=="1" set "v_MTP_prechk_Base=True" +if /i "%bs%"=="2" set "v_MTP_prechk_Base=False" +if /i "%bs%"=="d" set "v_MTP_prechk_Base=True" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto MTP +if /i "%bs%"=="e" goto salida + +if "%v_MTP_prechk_Base%"=="none" echo 错误的选项 +if "%v_MTP_prechk_Base%"=="none" echo. +if "%v_MTP_prechk_Base%"=="none" goto op_MTP_prechk_Base + +set v_MTP_prechk_Base="MTP_prechk_Base=%v_MTP_prechk_Base%" +set v_MTP_prechk_Base="%v_MTP_prechk_Base%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "173" -nl "set %v_MTP_prechk_Base%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "173" -nl "Line in config was changed to: " +echo. +pause +goto MTP + +:op_MTP_prechk_Upd +cls +call :logo +echo *************************************************************************** +echo 检查更新是否已安装在设备中 +echo *************************************************************************** +echo 如果激活该选项,则检查设备中是否存在更新或dlc(如果版本低于发行版本), +echo 则删除旧的预安装以在安装过程之前回收空间(如果设备中的版本等于或更高,则跳过)。 +echo 如果停用,则允许安装订单更新或dlc以及覆盖具有相同版本号的更新。 +echo. +echo 输入"1"或"D",不检查和跳过更新或已经安装的dlc(默认) +echo 输入"2",检查和跳过更新或已经安装的dlc +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回MTP配置 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_MTP_prechk_Upd=none" +if /i "%bs%"=="1" set "v_MTP_prechk_Upd=False" +if /i "%bs%"=="2" set "v_MTP_prechk_Upd=True" +if /i "%bs%"=="d" set "v_MTP_prechk_Upd=False" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto MTP +if /i "%bs%"=="e" goto salida + +if "%v_MTP_prechk_Upd%"=="none" echo 错误的选项 +if "%v_MTP_prechk_Upd%"=="none" echo. +if "%v_MTP_prechk_Upd%"=="none" goto op_MTP_prechk_Upd + +set v_MTP_prechk_Upd="MTP_prechk_Upd=%v_MTP_prechk_Upd%" +set v_MTP_prechk_Upd="%v_MTP_prechk_Upd%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "174" -nl "set %v_MTP_prechk_Upd%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "174" -nl "Line in config was changed to: " +echo. +pause +goto MTP + +:op_MTP_saves_Inline +cls +call :logo +echo *************************************************************************** +echo 在文件夹或直接保存游戏转储 +echo *************************************************************************** +echo. +echo 输入"1"或"D",将游戏保存在文件夹中(默认) +echo 输入"2",直接保存游戏 +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回MTP配置 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_MTP_saves_Inline=none" +if /i "%bs%"=="1" set "v_MTP_saves_Inline=False" +if /i "%bs%"=="2" set "v_MTP_saves_Inline=True" +if /i "%bs%"=="d" set "v_MTP_saves_Inline=False" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto MTP +if /i "%bs%"=="e" goto salida + +if "%v_MTP_saves_Inline%"=="none" echo 错误的选择 +if "%v_MTP_saves_Inline%"=="none" echo. +if "%v_MTP_saves_Inline%"=="none" goto op_MTP_saves_Inline + +set v_MTP_saves_Inline="MTP_saves_Inline=%v_MTP_saves_Inline%" +set v_MTP_saves_Inline="%v_MTP_saves_Inline%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "176" -nl "set %v_MTP_saves_Inline%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "176" -nl "Line in config was changed to: " +echo. +pause +goto MTP + +:op_MTP_saves_AddTIDandVer +cls +call :logo +echo *************************************************************************** +echo 添加标题和版本标签以保存游戏 +echo *************************************************************************** +echo 这是为了在进行保存时知道设备上的游戏版本,以避免兼容性问题。 +echo. +echo 输入"1"或"D",将titleid和版本标签添加到文件中(默认) +echo 输入"2",不将titleid和版本标签添加到文件中 +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回MTP配置 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_MTP_saves_AddTIDandVer=none" +if /i "%bs%"=="1" set "v_MTP_saves_AddTIDandVer=False" +if /i "%bs%"=="2" set "v_MTP_saves_AddTIDandVer=True" +if /i "%bs%"=="d" set "v_MTP_saves_AddTIDandVer=False" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto MTP +if /i "%bs%"=="e" goto salida + +if "%v_MTP_saves_AddTIDandVer%"=="none" echo 错误的选项 +if "%v_MTP_saves_AddTIDandVer%"=="none" echo. +if "%v_MTP_saves_AddTIDandVer%"=="none" goto op_MTP_saves_AddTIDandVer + +set v_MTP_saves_AddTIDandVer="MTP_saves_AddTIDandVer=%v_MTP_saves_AddTIDandVer%" +set v_MTP_saves_AddTIDandVer="%v_MTP_saves_AddTIDandVer%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "177" -nl "set %v_MTP_saves_AddTIDandVer%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "177" -nl "Line in config was changed to: " +echo. +pause +goto MTP + +:op_MTP_pdrive_truecopy +cls +call :logo +echo *************************************************************************** +echo 添加标题和版本标签以保存游戏 +echo *************************************************************************** +echo 从Google云端硬盘公共链接安装或转移游戏时,NSCB需要在Google云端硬盘帐户中设置令牌身份验证和缓存文件夹设置,以实现更好的兼容性。 +echo. +echo 复制游戏以获得所有权到缓存文件夹,如果启用了TRUECOPY,也可以避免配额问题。 +echo 如果禁用TRUECOPY,则将游戏作为符号链接添加到缓存文件夹中,这将允许使用auth令牌调用文件,但是如果共享链接,则会出现配额问题。 +echo. +echo 输入"1"或"D",激活TRUECOPY(默认) +echo 输入"2",禁用TRUECOPY +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回MTP配置 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_op_MTP_pdrive_truecopy=none" +if /i "%bs%"=="1" set "v_op_MTP_pdrive_truecopy=True" +if /i "%bs%"=="2" set "v_op_MTP_pdrive_truecopy=False" +if /i "%bs%"=="d" set "v_op_MTP_pdrive_truecopy=True" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto MTP +if /i "%bs%"=="e" goto salida + +if "%v_op_MTP_pdrive_truecopy%"=="none" echo 错误的选项 +if "%v_op_MTP_pdrive_truecopy%"=="none" echo. +if "%v_op_MTP_pdrive_truecopy%"=="none" goto op_MTP_pdrive_truecopy + +set v_op_MTP_pdrive_truecopy="MTP_pdrive_truecopy=%v_op_MTP_pdrive_truecopy%" +set v_op_MTP_pdrive_truecopy="%v_op_MTP_pdrive_truecopy%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "179" -nl "set %v_op_MTP_pdrive_truecopy%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "179" -nl "Line in config was changed to: " +echo. +pause +goto MTP + +:op_MTP_standard_crypto +cls +call :logo +echo *************************************************************************** +echo 以标准加密方式安装所有NSP文件 +echo *************************************************************************** +echo 这意味着将安装没有票证和冠名权的NSP文件,以使控制台中的票证保持干净。 +echo. +echo 输入"1"或"D",用冠名权安装(默认) +echo 输入"2",以标准加密方式安装 +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回MTP菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_MTP_standard_crypto=none" +if /i "%bs%"=="1" set "v_MTP_standard_crypto=False" +if /i "%bs%"=="2" set "v_MTP_standard_crypto=True" +if /i "%bs%"=="d" set "v_MTP_standard_crypto=False" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto MTP +if /i "%bs%"=="e" goto salida + +if "%v_MTP_standard_crypto%"=="none" echo WRONG CHOICE +if "%v_MTP_standard_crypto%"=="none" echo. +if "%v_MTP_standard_crypto%"=="none" goto op_MTP_standard_crypto + +set v_MTP_standard_crypto="MTP_stc_installs=%v_MTP_standard_crypto%" +set v_MTP_standard_crypto="%v_MTP_standard_crypto%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "181" -nl "set %v_MTP_standard_crypto%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "181" -nl "Line in config was changed to: " +echo. +pause +goto MTP + +:op_MTP_ptch_install_spec +cls +call :logo +echo *************************************************************************** +echo 修补NSP和XCI的安装规范 +echo *************************************************************************** +echo 旧版将创建修补文件或转换后的文件,然后将其传输到控制台。 +echo Spec1创建一个补丁来动态修补流。Spec1将多文件视为触发多个连续安装的不同文件。 +echo. +echo 输入"1"或"D",使用SPECIFICATION1(默认) +echo 输入"2",使用传统规范 +echo. +echo 输入"0",返回配置菜单 +echo 输入"b",返回MTP菜单 +echo 输入"e",返回主程序 +echo. +set /p bs="输入您的选择:" +set "v_MTP_ptch_install_spec=none" +if /i "%bs%"=="1" set "v_MTP_ptch_install_spec=spec1" +if /i "%bs%"=="2" set "v_MTP_ptch_install_spec=legacy" +if /i "%bs%"=="d" set "v_MTP_ptch_install_spec=spec1" + +if /i "%bs%"=="0" goto sc1 +if /i "%bs%"=="b" goto MTP +if /i "%bs%"=="e" goto salida + +if "%v_MTP_ptch_install_spec%"=="none" echo WRONG CHOICE +if "%v_MTP_ptch_install_spec%"=="none" echo. +if "%v_MTP_ptch_install_spec%"=="none" goto op_MTP_ptch_install_spec + +set v_MTP_ptch_install_spec="MTP_ptch_inst_spec=%v_MTP_ptch_install_spec%" +set v_MTP_ptch_install_spec="%v_MTP_ptch_install_spec%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "182" -nl "set %v_MTP_ptch_install_spec%" +echo. +%pycommand% "%listmanager%" -rl "%op_file%" -ln "182" -nl "Line in config was changed to: " +echo. +pause +goto MTP + +:op_mtp_defaults +cls +call :logo +::MTP_verification +set v_mtp_verification="MTP_verification=True" +set v_mtp_verification="%v_mtp_verification%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "166" -nl "set %v_mtp_verification%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "166" -nl "Line in config was changed to: " +::MTP_prioritize_NSZ +set v_MTP_prioritize_NSZ="MTP_prioritize_NSZ=True" +set v_MTP_prioritize_NSZ="%v_MTP_prioritize_NSZ%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "167" -nl "set %v_MTP_prioritize_NSZ%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "167" -nl "Line in config was changed to: " +::MTP_exclude_xci_autinst +set v_MTP_exclude_xci_autinst="MTP_exclude_xci_autinst=True" +set v_MTP_exclude_xci_autinst="%v_MTP_exclude_xci_autinst%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "168" -nl "set %v_MTP_exclude_xci_autinst%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "168" -nl "Line in config was changed to: " +::MTP_aut_ch_medium +set v_MTP_aut_ch_medium="MTP_aut_ch_medium=True" +set v_MTP_aut_ch_medium="%v_MTP_aut_ch_medium%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "169" -nl "set %v_MTP_aut_ch_medium%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "169" -nl "Line in config was changed to: " +::MTP_chk_fw +set v_MTP_chk_fw="MTP_chk_fw=False" +set v_MTP_chk_fw="%v_MTP_chk_fw%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "170" -nl "set %v_MTP_chk_fw%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "170" -nl "Line in config was changed to: " +::MTP_prepatch_kg +set v_MTP_prepatch_kg="MTP_chk_fw=False" +set v_MTP_prepatch_kg="%v_MTP_prepatch_kg%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "171" -nl "set %v_MTP_prepatch_kg%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "171" -nl "Line in config was changed to: " +::MTP_prechk_Base +set v_MTP_prechk_Base="MTP_prechk_Base=True" +set v_MTP_prechk_Base="%v_MTP_prechk_Base%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "173" -nl "set %v_MTP_prechk_Base%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "173" -nl "Line in config was changed to: " +::MTP_prechk_Upd +set v_MTP_prechk_Upd="MTP_prechk_Upd=False" +set v_MTP_prechk_Upd="%v_MTP_prechk_Upd%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "174" -nl "set %v_MTP_prechk_Upd%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "174" -nl "Line in config was changed to: " +::MTP_saves_Inline +set v_MTP_saves_Inline="MTP_saves_Inline=False" +set v_MTP_saves_Inline="%v_MTP_saves_Inline%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "176" -nl "set %v_MTP_saves_Inline%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "176" -nl "Line in config was changed to: " +::MTP_saves_AddTIDandVer +set v_MTP_saves_AddTIDandVer="MTP_saves_AddTIDandVer=False" +set v_MTP_saves_AddTIDandVer="%v_MTP_saves_AddTIDandVer%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "177" -nl "set %v_MTP_saves_AddTIDandVer%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "177" -nl "Line in config was changed to: " +::MTP_pdrive_truecopy +set v_op_MTP_pdrive_truecopy="MTP_pdrive_truecopy=True" +set v_op_MTP_pdrive_truecopy="%v_op_MTP_pdrive_truecopy%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "179" -nl "set %v_op_MTP_pdrive_truecopy%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "179" -nl "Line in config was changed to: " +::MTP_standard_crypto +set v_MTP_standard_crypto="MTP_stc_installs=False" +set v_MTP_standard_crypto="%v_MTP_standard_crypto%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "181" -nl "set %v_MTP_standard_crypto%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "181" -nl "Line in config was changed to: " +::MTP_ptch_install_spec +set v_MTP_ptch_install_spec="MTP_ptch_inst_spec=spec1" +set v_MTP_ptch_install_spec="%v_MTP_ptch_install_spec%" +%pycommand% "%listmanager%" -cl "%op_file%" -ln "182" -nl "set %v_MTP_ptch_install_spec%" +%pycommand% "%listmanager%" -rl "%op_file%" -ln "182" -nl "Line in config was changed to: " +pause +goto sc1 + +:salida +exit /B + +:logo +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " BASED IN THE WORK OF BLAWAR AND LUCA FRAGA " +ECHO VERSION 1.00c +ECHO ------------------------------------------------------------------------------------- +ECHO Program's github: https://github.com/julesontheroad/NSC_BUILDER +ECHO Blawar's github: https://github.com/blawar +ECHO Luca Fraga's github: https://github.com/LucaFraga +ECHO ------------------------------------------------------------------------------------- +exit /B + +:idepend +cls +call :logo +call "%batdepend%" +goto sc1 diff --git a/py/Regional/ZH/ztools/NSP.bat b/py/Regional/ZH/ztools/NSP.bat new file mode 100644 index 00000000..0be59490 --- /dev/null +++ b/py/Regional/ZH/ztools/NSP.bat @@ -0,0 +1,66 @@ +endlocal +CD /d "%~2" +CD /d ".." +if "%~1" EQU "repack" call :nsp_repack +if "%~1" EQU "convert" call :nsp_convert +if "%~1" EQU "sp_convert" call :sp_nsp_convert +goto end + +:nsp_repack +ECHO ----------------- +echo 重打包为NSP +ECHO ----------------- +if exist "%w_folder%\secure\*.dat" del "%w_folder%\secure\*.dat" >NUL 2>&1 + +dir "%w_folder%\secure\*.cnmt.nca" /b > "%w_folder%\cnmt_fileslist.txt" +setlocal enabledelayedexpansion +set row= +for /f "usebackq" %%x in ("%w_folder%\cnmt_fileslist.txt") do set row="%w_folder%\secure\%%x" !row! +%pycommand% "%squirrel%" -o "%w_folder%\secure" --xml_gen %row% >NUL 2>&1 +endlocal +del "%w_folder%\cnmt_fileslist.txt" >NUL 2>&1 + +%pycommand% "%squirrel%" %buffer% %fatype% %fexport% -ifo "%w_folder%\secure" -c "%w_folder%\%filename%.nsp" +if exist "%w_folder%\*.ns*" ren "%w_folder%\*.ns*" "%filename%.ns*" >NUL 2>&1 + +exit /B + +:nsp_convert +ECHO ----------------- +echo 重打包为NSP +ECHO ----------------- +if exist "%w_folder%\secure\*.dat" del "%w_folder%\secure\*.dat" >NUL 2>&1 + +dir "%w_folder%\secure\*.cnmt.nca" /b > "%w_folder%\cnmt_fileslist.txt" +setlocal enabledelayedexpansion +set row= +for /f "usebackq" %%x in ("%w_folder%\cnmt_fileslist.txt") do set row="%w_folder%\secure\%%x" !row! +%pycommand% "%squirrel%" -o "%w_folder%\secure" --xml_gen %row% >NUL 2>&1 +endlocal +del "%w_folder%\cnmt_fileslist.txt" >NUL 2>&1 + +%pycommand% "%squirrel%" %buffer% %fatype% %fexport% -ifo "%w_folder%\secure" -c "%w_folder%\%filename%.nsp" +if exist "%w_folder%\*.ns*" ren "%w_folder%\*.ns*" "%filename%.ns*" >NUL 2>&1 + +exit /B + +:sp_nsp_convert +ECHO ----------------- +echo 重打包为NSP +ECHO ----------------- +if exist "!tfolder!\secure\*.dat" del "!tfolder!\secure\*.dat" >NUL 2>&1 + +dir "!tfolder!\secure\*.cnmt.nca" /b > "!tfolder!\cnmt_fileslist.txt" +set row= +for /f "usebackq" %%x in ("!tfolder!\cnmt_fileslist.txt") do set row="!tfolder!\secure\%%x" !row! +%pycommand% "%squirrel%" -o "!tfolder!\secure" --xml_gen %row% >NUL 2>&1 +del "!tfolder!\cnmt_fileslist.txt" + +%pycommand% "%squirrel%" %buffer% %fatype% %fexport% -ifo "!tfolder!\secure" -c "%w_folder%\!fname!.nsp" +if exist "%w_folder%\*.ns*" ren "%w_folder%\*.ns*" "!fname!.ns*" >NUL 2>&1 + +exit /B + +:end +PING -n 3 127.0.0.1 >NUL 2>&1 + diff --git a/py/Regional/ZH/ztools/RST.bat b/py/Regional/ZH/ztools/RST.bat new file mode 100644 index 00000000..7fab255c --- /dev/null +++ b/py/Regional/ZH/ztools/RST.bat @@ -0,0 +1,327 @@ +@ECHO OFF +:TOP_INIT +CD /d "%prog_dir%" + +REM ////////////////////////////////////////////////// +REM ///////////////////////////////////////////////// +REM 文件还原 +REM ///////////////////////////////////////////////// +REM //////////////////////////////////////////////// +:normalmode +cls +call :program_logo +echo ------------------------------------------------- +echo 文件还原已激活 +echo ------------------------------------------------- +if exist "rstlist.txt" goto prevlist +goto manual_INIT +:prevlist +set conta=0 +for /f "tokens=*" %%f in (rstlist.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (rstlist.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del rstlist.txt ) +endlocal +if not exist "rstlist.txt" goto manual_INIT +ECHO ....................................................... +ECHO 发现以前的列表。你想做什么? +:prevlist0 +ECHO ....................................................... +echo 输入"1",从上一个列表自动开始处理 +echo 输入"2",删除列表并创建一个新列表。 +echo 输入"3",继续构建上一个列表 +echo ....................................................... +echo NOTE: By pressing 3 you'll see the previous list +echo before starting the processing the files and you will +echo be able to add and delete items from the list +echo. +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="3" goto showlist +if /i "%bs%"=="2" goto delist +if /i "%bs%"=="1" goto start_cleaning +if /i "%bs%"=="0" exit /B +echo. +echo BAD CHOICE +goto prevlist0 +:delist +del rstlist.txt +cls +call :program_logo +echo ------------------------------------------------- +echo 文件还原已激活 +echo ------------------------------------------------- +echo .................................. +echo 已经开始一个新的列表 +echo .................................. + +:manual_INIT +endlocal +ECHO *********************************************** +echo 输入"1",将文件夹添加到列表中 +echo 输入"2",将文件添加到列表中 +echo 输入"3",通过本地文件库,将文件添加到列表 +echo 输入"4",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"0",返回模式选择菜单 +ECHO *********************************************** +echo. +%pycommand% "%squirrel%" -t nsp xci -tfile "%prog_dir%rstlist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" exit /B +if /i "%eval%"=="1" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%rstlist.txt" mode=folder ext="nsp xci" ) 2>&1>NUL +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%rstlist.txt" mode=file ext="nsp xci" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%rstlist.txt" "extlist=nsp xci" ) +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%rstlist.txt" "extlist=nsp xci" ) +goto checkagain +echo. +:checkagain +echo 你想要做什么?? +echo ...................................................................... +echo "拖动另一个文件或文件夹并按Enter键将项目添加到列表中" +echo. +echo 输入"1",开始处理 +echo 输入"2",将另一个文件夹添加到列表中 +echo 输入"3",将另一个文件添加到列表中 +echo 输入"4",通过本地文件库,将文件添加到列表 +echo 输入"5",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"e",退出 +echo 输入"i",以查看要处理的文件列表 +echo 输入"r",删除一些文件 (从底部计数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" -t nsp xci -tfile "%prog_dir%rstlist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal + +if /i "%eval%"=="0" exit /B +if /i "%eval%"=="1" goto start_cleaning +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%rstlist.txt" mode=folder ext="nsp xci" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%rstlist.txt" mode=file ext="nsp xci" ) 2>&1>NUL +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%rstlist.txt" "extlist=nsp xci" ) +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%rstlist.txt" "extlist=nsp xci" ) +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto showlist +if /i "%eval%"=="r" goto r_files +if /i "%eval%"=="z" del rstlist.txt + +goto checkagain + +:r_files +set /p bs="输入要删除的文件数 (从底部): " +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (rstlist.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:update_list1 +if !pos1! GTR !pos2! ( goto :update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :update_list1 +:update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>rstlist.txt.new +endlocal +move /y "rstlist.txt.new" "rstlist.txt" >nul +endlocal + +:showlist +cls +call :program_logo +echo ------------------------------------------------- +echo 文件还原已激活 +echo ------------------------------------------------- +ECHO ------------------------------------------------- +ECHO 要处理的文件 +ECHO ------------------------------------------------- +for /f "tokens=*" %%f in (rstlist.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (rstlist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 你添加了 !conta! 要处理的文件 +echo ................................................. +endlocal + +goto checkagain + +:s_cl_wrongchoice +echo 错误的选择 +echo ............ +:start_cleaning +echo ******************************************************* +echo 选择如何处理文件 +echo ******************************************************* +echo 如果使用合法来源的NSCB修改过的文件的nca文件是可恢复的, +echo 如果不是,那您就不走运了 +echo. +echo 此模式将恢复: +echo - XCI或NSP之间的转换(由NSCB完成) +echo - 所有权删除操作 +echo - 密钥生成和RSV更改 +echo. +echo + 尚不支持还原链接帐户修补程序 +echo + 在此第一个实现中,多内容文件首先需要由多内容分割器处理。 +echo. +echo ------------------------------------------ +echo 输入"1",处理文件 +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set vrepack=none +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="1" goto restorefiles +if %vrepack%=="none" goto s_cl_wrongchoice + +:restorefiles +cls +call :program_logo +CD /d "%prog_dir%" +MD "%fold_output%" >NUL 2>&1 +for /f "tokens=*" %%f in (rstlist.txt) do ( +MD "%w_folder%" >NUL 2>&1 + +%pycommand% "%squirrel%" %buffer% -o "%w_folder%" %buffer% -tfile "%prog_dir%rstlist.txt" --restore "" +%pycommand% "%squirrel%" --strip_lines "%prog_dir%rstlist.txt" + +move "%w_folder%\*.xci" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.xc*" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.nsp" "%fold_output%" >NUL 2>&1 +move "%w_folder%\*.ns*" "%fold_output%" >NUL 2>&1 + +RD /S /Q "%w_folder%" >NUL 2>&1 +call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:s_exit_choice +if exist rstlist.txt del rstlist.txt +if /i "%va_exit%"=="true" echo PROGRAM WILL CLOSE NOW +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto s_exit_choice + +:contador_NF +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (rstlist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍有 !conta! 要处理的文件 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + + +:://///////////////////////////////////////////////// +::子程序 +:://///////////////////////////////////////////////// + +:squirrell +echo ,;:;;, +echo ;;;;; +echo .=', ;:;;:, +echo /_', "=. ';:;:; +echo @=:__, \,;:;:' +echo _(\.= ;:;;' +echo `"_( _/="` +echo `"' +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " BASED ON THE WORK OF BLAWAR AND LUCA FRAGA " +ECHO VERSION 1.00c +ECHO ------------------------------------------------------------------------------------- +ECHO Program's github: https://github.com/julesontheroad/NSC_BUILDER +ECHO Blawar's github: https://github.com/blawar +ECHO Luca Fraga's github: https://github.com/LucaFraga +ECHO ------------------------------------------------------------------------------------- +exit /B + +:delay +PING -n 2 127.0.0.1 >NUL 2>&1 +exit /B + +:thumbup +echo. +echo /@ +echo \ \ +echo ___\ \ +echo (__O) \ +echo (____@) \ +echo (____@) \ +echo (__o)_ \ +echo \ \ +echo. +echo 希望您玩的开心 +exit /B + + +:salida +exit /B diff --git a/py/Regional/ZH/ztools/XCI.bat b/py/Regional/ZH/ztools/XCI.bat new file mode 100644 index 00000000..4afcfdc1 --- /dev/null +++ b/py/Regional/ZH/ztools/XCI.bat @@ -0,0 +1,104 @@ +endlocal +CD /d "%~2" +CD /d ".." +::echo %~1" +if "%~1" EQU "repack" call :xci_repack +if "%~1" EQU "sp_repack" call :sp_xci_repack +goto end + +:xci_repack +if not exist "%w_folder%\normal" MD "%w_folder%\normal" +if not exist "%w_folder%\update" MD "%w_folder%\update" + +dir /b "%w_folder%\secure\*.nca">"%w_folder%\lisfiles.txt" +FINDSTR /I ".nca" "%w_folder%\lisfiles.txt">"%w_folder%\nca_list.txt" +del "%w_folder%\lisfiles.txt" + +setlocal enabledelayedexpansion +set nca_number= +for /f "usebackq tokens=*" %%f in ("%w_folder%\nca_list.txt") do ( +set /a nca_number=!nca_number! + 1 +) +del "%w_folder%\nca_list.txt" +::echo !nca_number! + +if !nca_number! LEQ 3 goto c1dummy +if !nca_number! LEQ 2 goto c2dummy +if !nca_number! LEQ 1 goto c3dummy +goto nodummy +:c3dummy +type nul>testfile>"%w_folder%\secure\000" +:c2dummy +type nul>testfile>"%w_folder%\secure\00" +:c1dummy +type nul>testfile>"%w_folder%\secure\0" +:nodummy +endlocal +echo ------------------------------- +echo 重打包为XCI +echo ------------------------------- +if exist "%w_folder%\secure\*.dat" del "%w_folder%\secure\*.dat" >NUL 2>&1 +if exist "%w_folder%\secure\*.xml" del "%w_folder%\secure\*.xml" >NUL 2>&1 +%pycommand% "%squirrel%" %buffer% -ifo "%w_folder%" %fatype% --create_xci "%w_folder%\%filename%.xci" +exit /B + +:sp_xci_repack +if not exist "!tfolder!\normal" MD "!tfolder!\normal" +if not exist "!tfolder!\update" MD "!tfolder!\update" + +dir /b "!tfolder!\secure\*.nca">"!tfolder!\lisfiles.txt" +FINDSTR /I ".nca" "!tfolder!\lisfiles.txt">"!tfolder!\nca_list.txt" + +del "!tfolder!\lisfiles.txt" + +set nca_number= +for /f "usebackq tokens=*" %%f in ("!tfolder!\nca_list.txt") do ( +set /a nca_number=!nca_number! + 1 +) +::echo !nca_number! + +if !nca_number! LEQ 3 goto sp_c1dummy +if !nca_number! LEQ 2 goto sp_c2dummy +if !nca_number! LEQ 1 goto sp_c3dummy +goto sp_nodummy +:sp_c3dummy +type nul>testfile>"!tfolder!\secure\000" +:sp_c2dummy +type nul>testfile>"!tfolder!\secure\00" +:sp_c1dummy +type nul>testfile>"!tfolder!\secure\0" +:sp_nodummy + +::Enable old license nsp method if necessary +if not exist "!tfolder!\secure\*.tik" goto sp_build +MD "!tfolder!\lc +echo f | xcopy /f /y "!tfolder!\secure\*.cnmt.nca" "!tfolder!\lc\" >NUL 2>&1 +move "!tfolder!\secure\*.tik" "!tfolder!\lc" >NUL 2>&1 +move "!tfolder!\secure\*.cert" "!tfolder!\lc" >NUL 2>&1 +for /f "usebackq tokens=*" %%f in ("!tfolder!\nca_list.txt") do ( +%pycommand% "%squirrel%" --ncatype "!tfolder!\secure\%%f">"!tfolder!\nca_type.txt" +set /p nca_type=<"!tfolder!\nca_type.txt" +del "!tfolder!\nca_type.txt" +if "!nca_type!" EQU "Content.CONTROL" ( set "ctrl_nca=%%f" ) +) +echo f | xcopy /f /y "!tfolder!\secure\!ctrl_nca!" "!tfolder!\lc\" >NUL 2>&1 +del "!tfolder!\nca_list.txt" +dir "!tfolder!\lc" /b > "!tfolder!\lc_list.txt" +set row= +for /f "usebackq" %%x in ("!tfolder!\lc_list.txt") do set row="!tfolder!\lc\%%x" !row! +%pycommand% "%squirrel%" -c "%w_folder%\output.nsp" %row% >NUL 2>&1 +ren "%w_folder%\output.nsp" "!fname![lc].nsp" +del "!tfolder!\lc_list.txt" + +:sp_build +echo ------------------------------- +echo 重打包为XCI +echo ------------------------------- +if exist "!tfolder!\secure\*.dat" del "!tfolder!\secure\*.dat" >NUL 2>&1 +if exist "!tfolder!\secure\*.xml" del "!tfolder!\secure\*.xml" >NUL 2>&1 +%pycommand% "%squirrel%" %buffer% -ifo "!tfolder!" %fatype% --create_xci "%w_folder%\!fname!.xci" +RD /S /Q "!tfolder!" >NUL 2>&1 +exit /B + +:end +PING -n 3 127.0.0.1 >NUL 2>&1 \ No newline at end of file diff --git a/py/Regional/ZH/ztools/ZSTD.bat b/py/Regional/ZH/ztools/ZSTD.bat new file mode 100644 index 00000000..e543dc64 --- /dev/null +++ b/py/Regional/ZH/ztools/ZSTD.bat @@ -0,0 +1,529 @@ +@ECHO OFF +:TOP_INIT +CD /d "%prog_dir%" + +REM ////////////////////////////////////////////////// +REM ///////////////////////////////////////////////// +REM 压缩 +REM ///////////////////////////////////////////////// +REM //////////////////////////////////////////////// +:normalmode +cls +call :program_logo +echo ------------------------------------------------- +echo 压缩或解压模式已激活 +echo ------------------------------------------------- +if exist "zzlist.txt" goto prevlist +goto manual_INIT +:prevlist +set conta=0 +for /f "tokens=*" %%f in (zzlist.txt) do ( +echo %%f +) >NUL 2>&1 +setlocal enabledelayedexpansion +for /f "tokens=*" %%f in (zzlist.txt) do ( +set /a conta=!conta! + 1 +) >NUL 2>&1 +if !conta! LEQ 0 ( del zzlist.txt ) +endlocal +if not exist "zzlist.txt" goto manual_INIT +ECHO ....................................................... +ECHO 发现以前的列表。你想做什么?? +:prevlist0 +ECHO ....................................................... +echo 输入"1",从上一个列表自动开始处理 +echo 输入"2",删除列表并创建一个新列表。 +echo 输入"3",继续构建上一个列表 +echo ....................................................... +echo 注意:输入 3,您将在开始处理文件之前看到上一个列表, +echo 并且可以从列表中添加和删除项目 +echo. +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="3" goto showlist +if /i "%bs%"=="2" goto delist +if /i "%bs%"=="1" goto start +if /i "%bs%"=="0" exit /B +echo. +echo 错误的选择 +goto prevlist0 +:delist +del zzlist.txt +cls +call :program_logo +echo ------------------------------------------------- +echo 压缩或解压缩模式已激活 +echo ------------------------------------------------- +echo .................................. +echo 已经开始一个新的列表 +echo .................................. + +:manual_INIT +endlocal +echo "拖动另一个文件或文件夹并按回车键将项目添加到列表中" +echo. +ECHO *********************************************** +echo 输入"1",将文件夹添加到列表中 +echo 输入"2",将文件添加到列表中 +echo 输入"3",通过本地文件库,将文件添加到列表 +echo 输入"4",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"0",返回模式选择菜单 +ECHO *********************************************** +echo. +%pycommand% "%squirrel%" -t nsp xci nsz xcz -tfile "%prog_dir%zzlist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal +if /i "%eval%"=="0" exit /B +if /i "%eval%"=="1" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%zzlist.txt" mode=folder ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%zzlist.txt" mode=file ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%zzlist.txt" "extlist=nsp xci nsz xcz" ) +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%zzlist.txt" "extlist=nsp xci nsz xcz" ) + +goto checkagain +echo. +:checkagain +echo 你想要做什么?? +echo ...................................................................... +echo "拖动另一个文件或文件夹并按回车键将项目添加到列表中" +echo. +echo 输入"1",开始处理 +echo 输入"2",将另一个文件夹添加到列表中 +echo 输入"3",将另一个文件添加到列表中 +echo 输入"4",通过本地文件库,将文件添加到列表 +echo 输入"5",通过folder-walker递归的方式,将文件添加到列表 +echo 输入"e",退出 +echo 输入"i",以查看要处理的文件列表 +echo 输入"r",删除一些文件 (从底部计数) +echo 输入"z",删除整个列表 +echo ...................................................................... +ECHO ************************************************* +echo 或输入"0",返回模式选择菜单 +ECHO ************************************************* +echo. +%pycommand% "%squirrel%" -t nsp xci nsz xcz -tfile "%prog_dir%zzlist.txt" -uin "%uinput%" -ff "uinput" +set /p eval=<"%uinput%" +set eval=%eval:"=% +setlocal enabledelayedexpansion +echo+ >"%uinput%" +endlocal + +if /i "%eval%"=="0" exit /B +if /i "%eval%"=="1" goto start +if /i "%eval%"=="2" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%zzlist.txt" mode=folder ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="3" ( %pycommand% "%squirrel%" -lib_call listmanager selector2list -xarg "%prog_dir%zzlist.txt" mode=file ext="nsp xci nsz xcz" ) 2>&1>NUL +if /i "%eval%"=="4" ( %pycommand% "%squirrel%" -lib_call picker_walker select_from_local_libraries -xarg "%prog_dir%zzlist.txt" "extlist=nsp xci nsz xcz" ) +if /i "%eval%"=="5" ( %pycommand% "%squirrel%" -lib_call picker_walker get_files_from_walk -xarg "%prog_dir%zzlist.txt" "extlist=nsp xci nsz xcz" ) +if /i "%eval%"=="e" goto salida +if /i "%eval%"=="i" goto showlist +if /i "%eval%"=="r" goto r_files +if /i "%eval%"=="z" del zzlist.txt + +goto checkagain + +:r_files +set /p bs="输入要删除的文件数 (从底部): " +set bs=%bs:"=% + +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (zzlist.txt) do ( +set /a conta=!conta! + 1 +) + +set /a pos1=!conta!-!bs! +set /a pos2=!conta! +set string= + +:update_list1 +if !pos1! GTR !pos2! ( goto :update_list2 ) else ( set /a pos1+=1 ) +set string=%string%,%pos1% +goto :update_list1 +:update_list2 +set string=%string%, +set skiplist=%string% +Set "skip=%skiplist%" +setlocal DisableDelayedExpansion +(for /f "tokens=1,*delims=:" %%a in (' findstr /n "^" ^&1>NUL ||Echo=%%b +)>zzlist.txt.new +endlocal +move /y "zzlist.txt.new" "zzlist.txt" >nul +endlocal + +:showlist +cls +call :program_logo +echo ------------------------------------------------- +echo 压缩或解压缩模式已激活 +echo ------------------------------------------------- +ECHO 要处理的文件: +for /f "tokens=*" %%f in (zzlist.txt) do ( +echo %%f +) +setlocal enabledelayedexpansion +set conta= +for /f "tokens=*" %%f in (zzlist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................. +echo 你添加了 !conta! 要处理的文件 +echo ................................................. +endlocal + +goto checkagain + +:s_cl_wrongchoice +echo 错误的选择 +echo ............ +:start +echo ******************************************************* +echo 选择如何处理文件 +echo ******************************************************* +echo 输入"1",将nsp或xci压缩成nsz或xcz +echo 输入"2",并行压缩 +echo 输入"3",解压缩nsz或者xcz +echo. +ECHO ****************************************** +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +set choice=none +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="1" goto compression_presets_menu +if /i "%bs%"=="2" goto pararell_compress +if /i "%bs%"=="3" goto decompress +if %choice%=="none" goto s_cl_wrongchoice + + +:compression_presets_wrongchoice +echo 错误的选择 +echo ............ +:compression_presets_menu +echo ******************************************************* +echo 压缩预设 +echo ******************************************************* +echo 易于使用的压缩预设 +echo. +echo 0. 手动设置 +echo 1. 快速 (多线程) - 等级 1 _ 4 线程 +echo 2. 快速 (单线程) - 等级 1 _ no 线程 +echo 3. 中等 (多线程) - 等级 10 _ 4 线程 +echo 4. 中等 (单线程) - 等级 10 _ no 线程 +echo 5. 平均 (多线程) - 等级 17 _ 2 线程 +echo 6. 平均 (单线程) - 等级 17 _ no 线程 +echo 7. 最慢 (单线程) - 等级 22 _ no 线程 +echo 8. 最慢 (多线程) - 等级 22 _ 1 线程 +echo 9. 自定义 (在配置中设置) +echo. +ECHO ****************************************** +echo 输入"d",默认(等级 17_no 线程) +echo 或输入"b",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入压缩等级数据: " +set bs=%bs:"=% +set level=none +if /i "%bs%"=="b" goto checkagain +if /i "%bs%"=="d" set "level=17" +if /i "%bs%"=="d" set "workers=0" + +if /i "%bs%"=="0" goto levels +if /i "%bs%"=="1" set "level=1" +if /i "%bs%"=="1" set "workers=4" +if /i "%bs%"=="2" set "level=1" +if /i "%bs%"=="2" set "workers=0" +if /i "%bs%"=="3" set "level=10" +if /i "%bs%"=="3" set "workers=4" +if /i "%bs%"=="4" set "level=10" +if /i "%bs%"=="4" set "workers=0" +if /i "%bs%"=="5" set "level=17" +if /i "%bs%"=="5" set "workers=2" +if /i "%bs%"=="6" set "level=17" +if /i "%bs%"=="6" set "workers=0" +if /i "%bs%"=="7" set "level=22" +if /i "%bs%"=="7" set "workers=0" +if /i "%bs%"=="8" set "level=22" +if /i "%bs%"=="8" set "workers=1" +if /i "%bs%"=="9" set "level=%compression_lv%" +if /i "%bs%"=="9" set "workers=%compression_threads%" + +if "%level%"=="none" goto compression_presets_wrongchoice +goto compress + + +:levels_wrongchoice +echo 错误的选择 +echo ............ +:levels +echo ******************************************************* +echo 输入压缩级别 +echo ******************************************************* +echo 输入1到22之间的压缩级别 +echo 注意: +echo + 等级 1 -快速和更小的压缩比 +echo + 等级 22 -缓慢但更好的压缩比 +echo 等级 10-17 是推荐设置的压缩比 +echo. +ECHO ****************************************** +echo 输入"d",默认(等级 17) +echo 或输入"b",返回上一选项 +echo 或输入"x",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入压缩等级数字[1-22]:" +set bs=%bs:"=% +set choice=none +if /i "%bs%"=="x" goto checkagain +if /i "%bs%"=="b" goto compression_presets_menu +if /i "%bs%"=="d" set "bs=17" +set "level=%bs%" +if %choice%=="none" goto levels_wrongchoice +goto threads +:threads_wrongchoice +echo 错误的选择 +echo ............ +:threads +echo ******************************************************* +echo 输入要使用的线程数 +echo ******************************************************* +echo 输入要在0和4之间使用的线程数 +echo 注意:建议保持默认 +echo 通过使用线程,您可能会获得一些减速,但会降低压缩率 +echo + 22级和4个线程可能会耗尽您的内存 +echo + 建议最大线程压缩级别为17,但会损失压缩率 +echo + -1将其设置为您的逻辑线程数 +echo. +ECHO ********************************************* +echo 输入"d",默认(0个线程) +echo 或输入"b",返回上一选项 +echo 或输入"x",返回列表选项 +ECHO ********************************************* +echo. +set /p bs="输入压缩线程数:" +set bs=%bs:"=% +set choice=none +if /i "%bs%"=="x" goto checkagain +if /i "%bs%"=="b" goto levels +if /i "%bs%"=="d" set "bs=0" +set "workers=%bs%" +if %choice%=="none" goto threads_wrongchoice + +:compress +cls +call :program_logo +echo ******************************* +echo 压缩NSP或XCI +echo ******************************* +CD /d "%prog_dir%" +%pycommand% "%squirrel%" -lib_call listmanager filter_list "%prog_dir%zzlist.txt","ext=nsp xci","token=False",Print="False" +for /f "tokens=*" %%f in (zzlist.txt) do ( + +%pycommand% "%squirrel%" %buffer% -o "%fold_output%" -tfile "%prog_dir%zzlist.txt" --compress "%level%" --threads "%workers%" --nodelta "%skdelta%" --fexport "%xci_export%" +REM %pycommand% "%squirrel%" %buffer% -o "%fold_output%" -tfile "%prog_dir%zzlist.txt" --compress "%level%" --threads "%workers%" --nodelta "%skdelta%" --pararell "true" + +%pycommand% "%squirrel%" --strip_lines "%prog_dir%zzlist.txt" +call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:pararell_compress_wrongchoice +echo 错误的选择 +echo ............ +:pararell_compress +echo ******************************************************* +echo 输入要使用的实例数目 +echo ******************************************************* +echo 输入多个实例以使用大于0的实例 +echo 错误的值转换为2。0转换为1 +echo 注意: +echo + 您将创建数量与实例数相等的压缩文件 +echo + 如果您有足够的磁盘空间,则实例比线程更有效,并且计算能力较低 +echo + 如果您有足够的磁盘空间和计算能力,请不要害怕尝试使用10-20个实例 +echo + tqdm在打印带有螺纹的平行条纹时有点不习惯,因此屏幕将在平行模式下每3秒刷新一次以清除不良打印。 +echo. +ECHO ********************************************* +echo 输入"d",使用默认值(4个实例) +echo 或输入"b",返回之前的选项 +echo 或输入"x",返回列表选项 +ECHO ********************************************* +echo. +set /p bs="输入实例数目 [>1]: " +set bs=%bs:"=% +set choice=none +if /i "%bs%"=="x" goto checkagain +if /i "%bs%"=="b" goto start +if /i "%bs%"=="d" set "bs=4" +set "workers=%bs%" +if %choice%=="none" goto pararell_compress_wrongchoice + +:pararell_levels_wrongchoice +echo 错误的选择 +echo ............ +:pararell_levels +echo ******************************************************* +echo 输入压缩级别 +echo ******************************************************* +echo 输入1到22之间的压缩级别 +echo 注意: +echo + 等级 1 -快速和更小的压缩比 +echo + 等级 22 -缓慢但更好的压缩比 +echo 等级10-17是推荐设置的压缩比 + +echo. +ECHO ****************************************** +echo 输入"d",使用默认值(level 17) +echo 或输入"b",返回之前的选项 +echo 或输入"x",返回列表选项 +ECHO ****************************************** +echo. +set /p bs="输入级别数 [1-22]: " +set bs=%bs:"=% +set choice=none +if /i "%bs%"=="x" goto checkagain +if /i "%bs%"=="b" goto pararell_compress +if /i "%bs%"=="d" set "bs=17" +set "level=%bs%" +if %choice%=="none" goto pararell_levels_wrongchoice +goto pcompress +:pcompress +cls +call :program_logo +echo ******************************* +echo NSP或XCI并行压缩 +echo ******************************* +CD /d "%prog_dir%" +echo 过滤列表里的文件扩展名 +%pycommand% "%squirrel%" -lib_call listmanager filter_list "%prog_dir%zzlist.txt","ext=nsp xci","token=False",Print="False" +echo Arrange list by filesizes +%pycommand% "%squirrel%" -lib_call listmanager size_sorted_from_tfile -xarg "%prog_dir%zzlist.txt" +echo Start compression by batches of "%workers%" +%pycommand% "%squirrel%" %buffer% -o "%fold_output%" -tfile "%prog_dir%zzlist.txt" --compress "%level%" --threads "%workers%" --nodelta "%skdelta%" --fexport "%xci_export%" --pararell "true" + +ECHO --------------------------------------------------- +ECHO *********** 所有文件已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:decompress +cls +call :program_logo +echo ************************** +echo 解压NSZ或XCZ +echo ************************** +CD /d "%prog_dir%" +%pycommand% "%squirrel%" -lib_call listmanager filter_list "%prog_dir%zzlist.txt","ext=nsz xcz","token=False",Print="False" +for /f "tokens=*" %%f in (zzlist.txt) do ( + +%pycommand% "%squirrel%" -o "%fold_output%" -tfile "%prog_dir%zzlist.txt" --decompress "auto" + +%pycommand% "%squirrel%" --strip_lines "%prog_dir%zzlist.txt" +call :contador_NF +) +ECHO --------------------------------------------------- +ECHO *********** 所有文件都已处理! ************* +ECHO --------------------------------------------------- +goto s_exit_choice + +:s_exit_choice +if exist zzlist.txt del zzlist.txt +if /i "%va_exit%"=="true" echo PROGRAM WILL CLOSE NOW +if /i "%va_exit%"=="true" ( PING -n 2 127.0.0.1 >NUL 2>&1 ) +if /i "%va_exit%"=="true" goto salida +echo. +echo 输入"0",返回模式选择 +echo 输入"1",退出程序 +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +if /i "%bs%"=="0" goto manual_Reentry +if /i "%bs%"=="1" goto salida +goto s_exit_choice + +:contador_NF +setlocal enabledelayedexpansion +set /a conta=0 +for /f "tokens=*" %%f in (zzlist.txt) do ( +set /a conta=!conta! + 1 +) +echo ................................................... +echo 仍有 !conta! 要处理的文件 +echo ................................................... +PING -n 2 127.0.0.1 >NUL 2>&1 +set /a conta=0 +endlocal +exit /B + + + +:://///////////////////////////////////////////////// +::子程序 +:://///////////////////////////////////////////////// + +:squirrell +echo ,;:;;, +echo ;;;;; +echo .=', ;:;;:, +echo /_', "=. ';:;:; +echo @=:__, \,;:;:' +echo _(\.= ;:;;' +echo `"_( _/="` +echo `"' +exit /B + +:program_logo + +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " BASED ON THE WORK OF BLAWAR AND LUCA FRAGA " +ECHO VERSION 1.00c +ECHO ------------------------------------------------------------------------------------- +ECHO Program's github: https://github.com/julesontheroad/NSC_BUILDER +ECHO Blawar's github: https://github.com/blawar +ECHO Luca Fraga's github: https://github.com/LucaFraga +ECHO ------------------------------------------------------------------------------------- +exit /B + +:delay +PING -n 2 127.0.0.1 >NUL 2>&1 +exit /B + +:thumbup +echo. +echo /@ +echo \ \ +echo ___\ \ +echo (__O) \ +echo (____@) \ +echo (____@) \ +echo (__o)_ \ +echo \ \ +echo. +echo 希望您玩的开心 +exit /B + + +:salida +exit /B diff --git a/py/Regional/ZH/ztools/info.bat b/py/Regional/ZH/ztools/info.bat new file mode 100644 index 00000000..52741383 --- /dev/null +++ b/py/Regional/ZH/ztools/info.bat @@ -0,0 +1,422 @@ +:sc1 +set "info_dir=%~1INFO" +cls +call :logo +echo ******************************************************** +echo 文件-信息 +echo ******************************************************** +echo. +echo -- 输入"0",返回主程序 -- +echo. +set /p bs="或拖放XCI/NSP/NSX/NCA文件到窗口并按ENTER键:" +set bs=%bs:"=% +if /i "%bs%"=="0" goto salida +set "targt=%bs%" +for /f "delims=" %%a in ("%bs%") do set "Extension=%%~xa" +for /f "delims=" %%a in ("%bs%") do set "Name=%%~na" +if "%Extension%" EQU ".nsp" ( goto sc2 ) +if "%Extension%" EQU ".nsx" ( goto sc2 ) +if "%Extension%" EQU ".xci" ( goto sc2 ) +if "%Extension%" EQU ".nca" ( goto sc3 ) +if "%Extension%" EQU ".nsz" ( goto sc2_1 ) +if "%Extension%" EQU ".xcz" ( goto sc2_1 ) +echo 文件类型错误 +pause +goto sc1 +:sc2 +cls +call :logo +echo ....................................................... +echo 输入"1",获取文件列表 +echo 输入"2",获取内容列表 +echo 输入"3",获取NUT信息 +echo 输入"4",获取游戏信息和固件要求 +echo 输入"5",读取CNMT +echo 输入"6",读取NACP +echo 输入"7",读取main.NPDM +echo 输入"8",校验文件(XCI/NSP/NSX/NCA) +echo. +echo 输入"b",返回文件加载 +echo 输入"0",返回主程序 +echo. +echo --- 或拖动新文件更改当前目标 --- +echo ....................................................... +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +for /f "delims=" %%a in ("%bs%") do set "Extension=%%~xa" +if "%Extension%" EQU ".*" ( goto wch ) +if "%Extension%" EQU ".nsp" ( goto snfi ) +if "%Extension%" EQU ".nsx" ( goto snfi ) +if "%Extension%" EQU ".xci" ( goto snfi ) +if "%Extension%" EQU ".nsz" ( goto snfi2 ) +if "%Extension%" EQU ".xcz" ( goto snfi2 ) +if "%Extension%" EQU ".nca" ( goto snfi_nca ) + +if /i "%bs%"=="1" goto g_file_content +if /i "%bs%"=="2" goto g_content_list +if /i "%bs%"=="3" goto n_info +if /i "%bs%"=="4" goto f_info +if /i "%bs%"=="5" goto r_cnmt +if /i "%bs%"=="6" goto r_nacp +if /i "%bs%"=="7" goto r_npdm +if /i "%bs%"=="8" goto verify + +if /i "%bs%"=="b" goto sc1 +if /i "%bs%"=="0" goto salida +goto wch + +:sc2_1 +cls +call :logo +echo ....................................................... +echo 输入"1",获取文件列表 +echo 输入"2",获取内容列表 +echo 输入"3",获取游戏信息和固件要求 +echo 输入"4",读取CNMT +echo 输入"5",读取NACP +echo 输入"6",文件校验 +echo. +echo 输入"b",返回文件加载 +echo 输入"0",返回主程序 +echo. +echo --- 或拖动新文件更改当前目标 --- +echo ....................................................... +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +for /f "delims=" %%a in ("%bs%") do set "Extension=%%~xa" +if "%Extension%" EQU ".*" ( goto wch ) +if "%Extension%" EQU ".nsp" ( goto snfi ) +if "%Extension%" EQU ".nsx" ( goto snfi ) +if "%Extension%" EQU ".xci" ( goto snfi ) +if "%Extension%" EQU ".nsz" ( goto snfi2 ) +if "%Extension%" EQU ".xcz" ( goto snfi2 ) +if "%Extension%" EQU ".nca" ( goto snfi_nca ) + +if /i "%bs%"=="1" goto g_file_content2 +if /i "%bs%"=="2" goto g_content_list2 +if /i "%bs%"=="3" goto f_info2 +if /i "%bs%"=="4" goto r_cnmt2 +if /i "%bs%"=="5" goto r_nacp2 +if /i "%bs%"=="6" goto verify2 + +if /i "%bs%"=="b" goto sc1 +if /i "%bs%"=="0" goto salida +goto wch2 + +:snfi +for /f "delims=" %%a in ("%bs%") do set "Name=%%~na" +set "targt=%bs%" +goto sc2 +:snfi2 +for /f "delims=" %%a in ("%bs%") do set "Name=%%~na" +set "targt=%bs%" +goto sc2_1 +:wch +echo 错误的选择 +pause +goto sc2 + +:wch2 +echo 错误的选择 +pause +goto sc2_1 + +:g_file_content +cls +call :logo +echo ******************************************************** +echo 显示NSP文件内容或XCI安全分区内容 +echo ******************************************************** +%pycommand% "%squirrel%" -o "%info_dir%" --ADVfilelist "%targt%" +goto sc2 + +:g_file_content2 +cls +call :logo +echo ******************************************************** +echo 显示NSZ文件内容或XCZ安全分区内容 +echo ******************************************************** +%pycommand% "%squirrel%" -o "%info_dir%" --ADVfilelist "%targt%" +goto sc2_1 + +:g_content_list +cls +call :logo +echo ******************************************************** +echo 显示按ID排列的NSP或XCI内容 +echo ******************************************************** +%pycommand% "%squirrel%" -o "%info_dir%" --ADVcontentlist "%targt%" +goto sc2 + +:g_content_list2 +cls +call :logo +echo ******************************************************** +echo 显示按ID排列的NSP或XCI内容 +echo ******************************************************** +%pycommand% "%squirrel%" -o "%info_dir%" --ADVcontentlist "%targt%" +goto sc2_1 + +:n_info +cls +call :logo +echo ******************************************************** +echo NUT信息 - BY BLAWAR +echo ******************************************************** +%pycommand% "%squirrel%" -i "%targt%" +echo. +ECHO ******************************************************** +echo 是否要将信息复制到文本文件? +ECHO ******************************************************** +:n_info_wrong +echo 输入"1",复制 +echo 输入"2",不复制 +echo. +set /p bs="输入您的选择: " +if /i "%bs%"=="1" goto n_info_print +if /i "%bs%"=="2" goto sc2 +echo 错误的选择 +echo. +goto n_info_wrong +:n_info_print +if not exist "%info_dir%" MD "%info_dir%">NUL 2>&1 +set "i_file=%info_dir%\%Name%-info.txt" +%pycommand% "%squirrel%" -i "%targt%">"%i_file%" +%pycommand% "%squirrel%" --strip_lines "%i_file%" "2" +ECHO 完成 +goto sc2 + +:f_info +cls +call :logo +echo ******************************************************** +echo 显示有关所需固件的信息和数据 +echo ******************************************************** +%pycommand% "%squirrel%" -o "%info_dir%" --translate %transnutdb% --fw_req "%targt%" +goto sc2 + +:f_info2 +cls +call :logo +echo ******************************************************** +echo 显示有关所需固件的信息和数据 +echo ******************************************************** +%pycommand% "%squirrel%" -o "%info_dir%" --translate %transnutdb% --fw_req "%targt%" + +goto sc2_1 + +:r_cnmt +cls +call :logo +echo ******************************************************** +echo 从NSP或XCI META NCA里显示CMT数据 +echo ******************************************************** +%pycommand% "%squirrel%" -o "%info_dir%" --Read_cnmt "%targt%" +if "%Extension%" EQU ".nsz" ( goto sc2_1 ) +if "%Extension%" EQU ".xcz" ( goto sc2_1 ) +goto sc2 + +:r_cnmt2 +cls +call :logo +echo ******************************************************** +echo 从NSP或XCI META NCA里显示CMT数据 +echo ******************************************************** +%pycommand% "%squirrel%" -o "%info_dir%" --Read_cnmt "%targt%" +if "%Extension%" EQU ".nsz" ( goto sc2_1 ) +if "%Extension%" EQU ".xcz" ( goto sc2_1 ) +goto sc2_1 + +:r_nacp +cls +call :logo +echo ******************************************************** +echo 从NSP或XCI CONTROL NCA里显示CMT数据 +echo ******************************************************** +echo IMPLEMENTATION OF 0LIAM'S NACP LIBRARY +%pycommand% "%squirrel%" -o "%info_dir%" --Read_nacp "%targt%" +if "%Extension%" EQU ".nsz" ( goto sc2_1 ) +if "%Extension%" EQU ".xcz" ( goto sc2_1 ) +goto sc2 + +:r_nacp2 +cls +call :logo +echo ******************************************************** +echo 从NSP或XCI CONTROL NCA里显示CMT数据 +echo ******************************************************** +echo IMPLEMENTATION OF 0LIAM'S NACP LIBRARY +%pycommand% "%squirrel%" -o "%info_dir%" --Read_nacp "%targt%" +if "%Extension%" EQU ".nsz" ( goto sc2_1 ) +if "%Extension%" EQU ".xcz" ( goto sc2_1 ) +goto sc2_1 + +:r_npdm +cls +call :logo +echo ******************************************************** +echo 从NSP或XCI PROGRAM NCA里显示MAIN.NPDM DATA数据 +echo ******************************************************** +%pycommand% "%squirrel%" -o "%info_dir%" --Read_npdm "%targt%" +goto sc2 + + +:verify +cls +call :logo +echo ******************************************************** +echo 校验NSP,XCI或NCA +echo ******************************************************** +%pycommand% "%squirrel%" %buffer% -o "%info_dir%" -v "%targt%" + +goto sc2 + +:verify2 +cls +call :logo +echo ******************************************************** +echo 校验NSZ或XCZ文件 +echo ******************************************************** +%pycommand% "%squirrel%" %buffer% -o "%info_dir%" -v "%targt%" + +goto sc2_1 + +:sc3 +cls +call :logo +echo ....................................................... +echo 输入"1",获取NCA NUT-INFO +echo 输入"2",读取meta NCA CNMT +echo 输入"3",读取control NCA NACP +echo 输入"4",读取program NCA NPDM +echo 输入"5",校验NCA +echo. +echo 输入"b",返回文件加载 +echo 输入"0",返回主程序 +echo. +echo --- 或拖动新文件更改当前目标 --- +echo ....................................................... +echo. +set /p bs="输入您的选择: " +set bs=%bs:"=% +for /f "delims=" %%a in ("%bs%") do set "Extension=%%~xa" +if "%Extension%" EQU ".*" ( goto wch_nca ) +if "%Extension%" EQU ".nca" ( goto snfi_nca ) +if "%Extension%" EQU ".nsp" ( goto snfi ) +if "%Extension%" EQU ".nsx" ( goto snfi ) +if "%Extension%" EQU ".xci" ( goto snfi ) + +if /i "%bs%"=="1" goto n_info_nca +if /i "%bs%"=="2" goto r_cnmt_nca +if /i "%bs%"=="3" goto r_nacp_nca +if /i "%bs%"=="4" goto r_npdm_nca +if /i "%bs%"=="5" goto verify_nca + +if /i "%bs%"=="b" goto sc1 +if /i "%bs%"=="0" goto salida +goto wch + +:snfi_nca +for /f "delims=" %%a in ("%bs%") do set "Name=%%~na" +set "targt=%bs%" +goto sc3 +:wch_nca +echo 错误的选择 +pause +goto sc3 + +:n_info_nca +cls +call :logo +echo ******************************************************** +echo NUT信息 +echo ******************************************************** +%pycommand% "%squirrel%" -i "%targt%" +echo. +ECHO ******************************************************** +echo 是否要将信息复制到文本文件? +ECHO ******************************************************** +:n_info_wrong_nca +echo 输入"1",复制 +echo 输入"2",不复制 +echo. +set /p bs="输入您的选择: " +if /i "%bs%"=="1" goto n_info_print_nca +if /i "%bs%"=="2" goto sc3 +echo 错误的选择 +echo. +goto n_info_wrong_nca +:n_info_print_nca +if not exist "%info_dir%" MD "%info_dir%">NUL 2>&1 +set "i_file=%info_dir%\%Name%-info.txt" +%pycommand% "%squirrel%" -i "%targt%">"%i_file%" +%pycommand% "%squirrel%" -i "%targt%">"%i_file%" +%pycommand% "%squirrel%" --strip_lines "%i_file%" "2" +ECHO 完成 +goto sc3 + +:r_cnmt_nca +cls +call :logo +echo ******************************************************** +echo 从NSP或XCI META NCA中显示CMT数据 +echo ******************************************************** +%pycommand% "%squirrel%" -o "%info_dir%" --Read_cnmt "%targt%" +goto sc3 + +:r_nacp_nca +cls +call :logo +echo ******************************************************** +echo 从NSP或XCI CONTROL NCA中显示NACP DATA数据 +echo ******************************************************** +echo 0LIAM的NACP库的实现 +%pycommand% "%squirrel%" -o "%info_dir%" --Read_nacp "%targt%" +goto sc3 + +:r_npdm_nca +cls +call :logo +echo ******************************************************** +echo 从NSP或XCI PROGRAM NCA中显示MAIN.NPDM数据 +echo ******************************************************** +%pycommand% "%squirrel%" -o "%info_dir%" --Read_npdm "%targt%" +goto sc3 + +:verify_nca +cls +call :logo +echo ******************************************************** +echo 检验NSP,XCI或NCA +echo ******************************************************** +%pycommand% "%squirrel%" %buffer% -o "%info_dir%" -v "%targt%" +goto sc3 + + +:salida +exit /B + +:logo +ECHO __ _ __ __ +ECHO ____ _____ ____ / /_ __ __(_) /___/ /__ _____ +ECHO / __ \/ ___/ ___/ / __ \/ / / / / / __ / _ \/ ___/ +ECHO / / / (__ ) /__ / /_/ / /_/ / / / /_/ / __/ / +ECHO /_/ /_/____/\___/____/_.___/\__,_/_/_/\__,_/\___/_/ +ECHO /_____/ +ECHO ------------------------------------------------------------------------------------- +ECHO NINTENDO SWITCH CLEANER AND BUILDER +ECHO (THE XCI MULTI CONTENT BUILDER AND MORE) +ECHO ------------------------------------------------------------------------------------- +ECHO ============================= BY JULESONTHEROAD ============================= +ECHO ------------------------------------------------------------------------------------- +ECHO " POWERED BY SQUIRREL " +ECHO " BASED ON THE WORK OF BLAWAR AND LUCA FRAGA " +ECHO VERSION 1.00c +ECHO ------------------------------------------------------------------------------------- +ECHO Program's github: https://github.com/julesontheroad/NSC_BUILDER +ECHO Blawar's github: https://github.com/blawar +ECHO Luca Fraga's github: https://github.com/LucaFraga +ECHO ------------------------------------------------------------------------------------- +exit /B diff --git a/py/Regional/ZH/ztools/web/main.html b/py/Regional/ZH/ztools/web/main.html new file mode 100644 index 00000000..347012c6 --- /dev/null +++ b/py/Regional/ZH/ztools/web/main.html @@ -0,0 +1,1157 @@ + + + + NSC Builder by JulesOnTheRoad + + + + + + + + + + + + + +
+ NSC Builder 1.00c - 鏂囦欢淇℃伅 +
+
+
+
    + +
  • 1锛氬崟鏂囦欢澶勭悊妯″紡
  • +
  • 2锛氬鏂囦欢鐢熸垚妯″紡
  • +
  • 3锛氬鏂囦欢鍒嗗壊妯″紡
  • +
  • 4锛氭枃浠朵俊鎭ā寮
  • +
  • 5锛氭暟鎹簱妯″紡
  • +
  • 6锛氶珮绾фā寮
  • +
  • 7锛氭枃浠跺悎骞舵ā寮
  • +
  • 0锛氶厤缃ā寮
  • +
+
+
+ + +
+ + +
+ + + + + + + diff --git a/py/Regional/ZH/ztools/web/nscb.html b/py/Regional/ZH/ztools/web/nscb.html new file mode 100644 index 00000000..a43a169a --- /dev/null +++ b/py/Regional/ZH/ztools/web/nscb.html @@ -0,0 +1,1156 @@ + + + + NSC Builder by JulesOnTheRoad + + + + + + + + + + + + +
+ NSC Builder 1.00c - 鏈嶅姟鍣ㄦā寮 +
+
+
+
    + +
  • 1锛氬崟鏂囦欢澶勭悊妯″紡
  • +
  • 2锛氬鏂囦欢鐢熸垚妯″紡
  • +
  • 3锛氬鏂囦欢鍒嗗壊妯″紡
  • +
  • 4锛氭枃浠朵俊鎭ā寮
  • +
  • 5锛氭暟鎹簱妯″紡
  • +
  • 6锛氶珮绾фā寮
  • +
  • 7锛氭枃浠跺悎骞舵ā寮
  • +
  • 0锛氶厤缃ā寮
  • +
+
+
+ + +
+ + +
+ + + + + + + diff --git a/py/zconfig/Regional bat/README_KR.md b/py/zconfig/Regional bat/README_KR.md deleted file mode 100644 index beef7c7c..00000000 --- a/py/zconfig/Regional bat/README_KR.md +++ /dev/null @@ -1,167 +0,0 @@ -# 雼岉厫霃 鞀れ渼旃 韥措Μ雱 氚 牍岆崝 (NSC_Builder) -https://github.com/julesontheroad/NSC_BUILDER - -## 1. 靹る獏 - -NSC_Builder電 xci_builder 氚 Nut_Batch_Cleaner毳 瓿勳啀頃橂姅 氤戫暕 霅 頂勲鞝濏姼鞛呺媹雼. - -NSC_Builder電 Blawar鞚 nut.py鞕 Luca Fraga鞚 hacbuild毳 旮半皹鞙茧頃橂┌, 鞝滊-甓岆Μ 靾橃爼 旮半姤鞚 臁办爼頃橂┐靹 CDN 旮半皹 旮半姤鞚 鞝滉卑頃橁碃 於旉皜 旮半姤鞚 於旉皜頃橃棳 "squirrel"鞚 鞝滉车頃╇媹雼. 韺岇澕 甏毽. 氩勳爠 v0.8鞐愳劀 頂勲攴鸽灗鞚 xci 靸濎劚鞚 鞙勴暣 hacbuild鞐 鞚橃〈頃橃 鞎婈碃 雼る瀸欹愳檧鞚 雿 雮橃潃 韱淀暕鞚 鞙勴暣 靸堧鞖 旖旊摐臧 鞛戩劚霅橃棃鞀惦媹雼. -氩勳爠 v0.8鞐愳劀 頂勲攴鸽灗鞚 xci 靸濎劚鞚 鞙勴暣 hacbuild鞐 鞚橃〈頃橃 鞎婈碃 雼る瀸欹愳檧鞚 雿 雮橃潃 韱淀暕鞚 鞙勴暣 靸堧鞖 旖旊摐臧 鞛戩劚霅橃棃鞀惦媹雼. - -雼る瀸欹愲姅 瓿 靸堧鞖 github 鞝鞛レ唽毳 鞏魂矊 霅 瓴冹澊瓿 氩犿儉 v0.8鞐愳劀 NSCB毳 鞙勴暅 exe搿 韺偣 霅 瓴冹瀰雼堧嫟. NSCB 氅旍澑 鞝鞛レ唽鞐愳劀 鞓る灅霅 雼る瀸欹 旖旊摐毳 氤 靾 鞛堨溂氅, 旖旊摐毳 鞝曤Μ頃 頉 NSCB 氩犿儉 雼硠臧 雭濍倶氅 靸堧鞖 旖旊摐臧 鞝鞛レ唽鞐 瓴岇嫓霅╇媹雼. - -## 2. 靻岇湢甓 靷牅鞚 鞚橂電 氍挫棁鞛呺媹旯? -nsp 韺岇澕鞐愳劀 titlerights 鞎旐樃頇旊ゼ 鞝滉卑頃橂┐ 韹办紦鞚 頃勳殧搿滍晿歆 鞎婈碃 瓴岇瀯鞚 靹れ箻頃 靾 鞛堨溂氙搿 旖橃啍鞐愳劀 於旍爜 臧電ロ暅 瓿店皠鞚 鞛戩晞歆氙搿 雼岉厫霃勳棎 鞗愱博 旄§爼 雿办澊韯半ゼ 氤措偧 頃勳殧臧 鞐嗢姷雼堧嫟. -霕愴暅 鞕鸽秬鞐愳劀 韹办紦鞚 靹れ箻頃橃 氇豁晿瓴岉晿電 nsp鞐愳劀 xci 韺岇澕搿滌潣 氤頇橃棎 霃勳泙鞚措惄雼堧嫟. - -## 3. 鞚 頂勲攴鸽灗鞙茧 氍挫棁鞚 頃 靾 鞛堨姷雼堦箤? - -順勳灛 氩勳爠鞚 頂勲攴鸽灗鞚 靷毄頃橂┐ 雼れ潓鞚 靾橅枆頃 靾 鞛堨姷雼堧嫟: -1.- 氅韹 旎厫韸 xci 霕愲姅 nsp 韺岇澕 鞝滌瀾 -2.- nsp 韺岇澕鞐愳劀 titlerights 鞎旐樃頇旊ゼ 歆鞗. -3.- "韺岉嫲靺 鞐呺嵃鞚错姼" 鞐嗢澊 xci 韺岇澕鞚 牍岆摐頃橃棳 鞀ろ啝毽 瓿店皠鞚 鞝侁矊 彀 -4.- 鞐呺嵃鞚错姼鞐愳劀 雿疙儉 鞝滉卑 -5.- 雼れ 旎厫旄犽ゼ xci 霕愲姅 nsp 韺岇澕搿 雼れ嫓 攵勴暊 -6.- xci鞕 nsp 靷澊鞚 旖橅厫旄 韺偣 氤瓴 -7.- 頃勳殧頃 鞁滌姢韰 氩勳爠鞚 鞁れ牅 瓴岇瀯 鞎旐樃頇旊 雮钉 -8.- 瓴岇瀯 頃措弲鞐 頃勳殧頃 毵堨姢韯 韨るゼ 雮钉 -9.- xci 氚 nsp鞐愳劀 鞁ろ枆 臧電ロ暅 韼岇洦鞏, 瓴岇瀯 鞝曤炒, nca 旖橅厫旄犾潣 韥赴 霌膘潣 鞝曤炒毳 頇曥澑 -10.- fat32鞕 順疙櫂霅橂姅 順曥嫕鞙茧 xci 氚 nsp 雮挫毄鞚 毽尒 -11.- 雼澕 氚 雼れ 旎厫韸 順曥嫕鞚 xci 韺岇澕 氚 nsp 韺岇澕 雽霟 牍岆摐 -12.- nsp, xci 韺岇澕鞚 雮挫毄鞚 鞚检箻頃橂弰搿 鞚措 氚旉靖旮 -13.- nsp, nsx, xci y nca 韺岇澕 頇曥澑 -14.- 韰嶌姢韸 順曥嫕鞚 鞝曤炒 於滊牓 -15.- nsp 韺岇澕鞚 雮挫毄鞚 於旍稖頃橁碃 xci 韺岇澕鞚 韺岉嫲靺橃潉 氤错樃 -16.- 雮橃鞐 氅韹 氇摐搿 鞛戩梾 靹れ爼 -17.- 氅韹 氇摐鞐愳劀 based-titleid 旮办鞙茧 鞛戩梾 攵勲Μ - -## 4. 鞚缄磩 觳橂Μ 氇摐: - -鞚缄磩 觳橂Μ鞐愲姅 霊 臧歆 氇摐臧 鞛堨姷雼堧嫟: - -- 鞛愲彊 氇摐: nsp 韺岇澕鞚 臧滊硠鞝侅溂搿 霌滊灅攴疙晿瓯半倶 鞚缄磩 觳橂Μ毳 韱淀暣 鞐煬 韺岇澕鞚 鞛堧姅 韽措崝毳 鞛愲彊 氇摐搿 霌滊灅攴疙暕雼堧嫟. - -- 靾橂彊 氇摐: 氚办箻毳 霊 氩 韥措Ν頃橂┐ 觳橂Μ頃 韺岇澕 氇╇鞚 鞛戩劚頃 靾 鞛堨姷雼堧嫟. - -鞛愲彊 氇摐鞚 霃欖瀾鞚 靾橂彊 氇摐鞚 甑劚 氅旊壌毳 韱淀暣 甑劚霅╇媹旯? - -## 5. 靾橂彊 氇摐 鞓奠厴: - -- 氇摐 0: 甑劚 氇摐. 頂勲攴鸽灗鞚 鞛愲彊 氚 靾橂彊 氇摐鞐愳劀 鞛戨彊頃橂姅 氚╈嫕 甑劚 -- 氇摐 1: 臧滊硠 韺偣. 韺岇澕 氇╇鞚 觳橂Μ頃橁碃 臧滊硠鞝 鞎曥稌 - * nsp\xci搿 韺偣 - * xci 韺岇澕 Supertrimm - * xci 霕愲姅 nsp 韺岇澕鞚 鞚措 氚旉靖旮 - * cnmt 鞓る崝搿 nsp 韺岇澕鞚 雼れ嫓 牍岆摐頃橁碃 cnmt.xml鞚 於旉皜 - * nsp, xci 韺岇澕 頇曥澑 -- 氇摐 2: 氅韹 韺偣. 頃橂倶鞚 xci 霕愲姅 nsp 韺岇澕鞐 韺岇澕 氇╇ 鞎曥稌 - * basedid搿 韺岇澕鞚 攵勲Μ - * 雮橃鞐 靷毄頃 鞛戩梾 靹れ爼 - * 鞚挫爠 鞛戩梾 觳橂Μ -- 氇摐 3: 氅韹 旖橅厫旄 攵勲鞍旮. 旖橅厫旄犽ゼ nsp 氚 xci 韺岇澕搿 攵勲Μ -- 氇摐 4: 韺岇澕 鞝曤炒. nsp 氚 xci 韺岇澕鞐 雽頃 鞝曤炒毳 氤搓碃 雮措炒雰 -- 氇摐 5: 雿办澊韯半矤鞚挫姢 氇摐. 雽霟 靸濎偘 鞝曤炒 於滊牓 -- 氇摐 6: 瓿犼笁 氇摐. 順勳灛 xci\nsp鞐愳劀 於旍稖 (雿 於旉皜頃挫暭 頃) -- L: 霠堦卑鞁 氇摐, 鞓る灅霅 旮半姤 - -## 6. 甑劚 氇摐: -### 鞛愲彊 氇摐 鞓奠厴. (鞛愲彊 氇摐鞐愲 鞝侅毄) -#### 毽尒 甑劚 -- NSP -- XCI -- BOTH -#### 韽措崝 觳橂Μ -- 韽措崝鞚 韺岇澕鞚 臧滊硠鞝侅溂搿 毽尒 (雼澕 旎厫韸 韺岇澕) -- 韽措崝鞚 韺岇澕鞚 頃粯 毽尒 (雼れ 旎厫韸 韺岇澕) -#### RSV 韺箻 甑劚 -- 頃勳殧頃 鞁滌姢韰 氩勳爠鞚 鞎旐樃頇旊炒雼 韥嫟氅 韺箻頃橃嫮鞁滌槫. -- 鞎旐樃頇旊炒雼 韥┐ 頃勳垬 鞁滌姢韰 氩勳爠鞚 韺箻頃橃 毵堨嫮鞁滌槫. -#### 韨れ儩靹 甑劚 -- 韺岇澕鞚 臧歆 靾 鞛堧姅 斓滊寑 韨 靸濎劚 (鞎旐樃頇)鞚 靹れ爼頃橃嫮鞁滌槫. -### 旮搿滊矊 鞓奠厴. (頂勲攴鸽灗鞚 靹戈硠鞝侅溂搿 鞏措柣瓴 鞛戨彊頃橂姅歆鞐 鞓來枼鞚 氙胳龚)) -#### 韰嶌姢韸 氚 氚瓣步靸 -- cmd 彀届潣 靸夓儊鞚 靹犿儩 -#### 鞛戩梾 韽措崝鞚 鞚措 -- 鞛戩梾 韽措崝鞚 鞚措 靹犿儩 -#### 於滊牓 韽措崝鞚 鞚措 -- 於滊牓 韽措崝鞚 鞚措瓿 鞙勳箻 靹犿儩 -#### 雿疙儉 韺岇澕 觳橂Μ -- 雿疙儉 NCA 韺岇澕鞚 韽灔頃犾 鞐秬 瓴办爼. 旮半掣臧掛潃 false搿 靹れ爼. -#### ZIP 甑劚 -- 韺岇澕 鞝曤炒毳 鞝鞛ロ晿電 zip 韺岇澕 靸濎劚 靹犿儩. 旮半掣臧掛潃 false搿 靹れ爼. -#### 鞛愲彊 膦呺 靹れ爼 -- 鞛戩梾鞚 鞕勲 頃 頉 cmd 彀届澊 雼瀳電旍 靹犿儩. -#### 韨 靸濎劚 頂勲‖頂勴姼 -- 靾橂彊 氇摐鞐愳劀 RSV鞕 韨 靸濎劚鞚 韺箻頃橂澕電 頂勲‖頂勴姼毳 氤搓碃 鞁峨嫟氅 靹犿儩. -#### 韺岇澕 鞀ろ姼毽 氩勴嵓 -- 韺岇澕 鞀ろ姼毽 鞛戩梾鞚 鞙勴暅 氩勴嵓 -#### 韺岇澕 FAT32 \ EXFAT 鞓奠厴 -xci 霕愲姅 nsp毳 fat32 順疙櫂 順曥嫕 霕愲姅 exfat 順曥嫕鞙茧 韺偣頃橃嫮鞁滌槫. -- 旃措摐 韽Х鞚 exfat搿 氤瓴 (旮半掣臧) -- SX OS 鞖 旃措摐 韽Х鞚 fat32搿 氤瓴 (xc0 氚 ns0 韺岇澕) -- 氇摖 CFW鞐 雽頃 旃措摐 韽Х鞚 fat32搿 氤瓴 (氤搓磤 韽措崝) - -#### 於滊牓 韺岇澕 鞝曤Μ 氚╇矔 -- 韺岇澕鞚 氤勲弰搿 甑劚 (旮半掣臧) -- 旖橅厫旄犽 靹れ爼霅 韽措崝鞐愳劀 韺岇澕 甑劚 - -## 7. 欷戩殧 - -鞚 頂勲攴鸽灗鞚 nsp 氚 xci 韺岇澕鞐愳劀 臧電ロ暅 斓滌唽 雿办澊韯半ゼ 靾橃爼頃橂牑瓿 鞁滊弰頃╇媹雼. 攴 鞚挫湢電 NCA 項る崝鞐愳劀 靹滊獏鞚 氇憪 氍挫嫓頃橂姅 靹滊獏 韺箻臧 頃勳殧頃橁赴 霑岆鞛呺媹雼. 鞚措 韽暔 霅 韼岇洦鞏措姅 雼れ潓瓿 臧欖姷雼堧嫟: -- SX OS -- ReiNX -https://github.com/Reisyukaku/ReiNX/releases -- RShadowhand鞚 鞀ろ儉韯 韺 "Singularit茅"電 靷爠 甑劚霅 攵勳渼旮半 頃勳殧頃 韺箻鞕 頇堧笇毳 鞁滌瀾鞚 韽暔頃橃棳 Hekate trough fusee 旮半掣鞚 韱淀暣 鞛愲彊 鞁ろ枆霅橂弰搿 毵岆摛鞏挫鞀惦媹雼. -https://github.com/RShadowhand/singularite/releases -- kosmos鞚 瓴届毎 靾橃爼霅 hekate鞚 hekate毳 sigpatches臧 於旉皜霅 瓴冹溂搿 氚旉繅雼堧嫟: -https://github.com/Joonie86/hekate/releases - -multi-nsp毳 靹れ箻頃橂牑氅 頃措嫻 靹れ箻 頂勲攴鸽灗瓿 順疙櫂霅橂姅 靹れ箻 頂勲攴鸽灗鞚 頃勳殧頃╇媹雼. 氤搓碃霅 順疙櫂 靹れ箻 頂勲攴鸽灗鞚 雼れ潓瓿 臧欖姷雼堧嫟.: -- SX OS rom-menu -- SX OS 靹れ箻 頂勲攴鸽灗 -- Blawar鞚 tinfoil: -https://github.com/digableinc/tinfoil -- Blawar鞚 lithium: -https://github.com/blawar/lithium - -## 8. 鞖旉惮靷暛 - -- 鞙堧弰鞖 OS臧 靹れ箻霅 旎错摠韯瓣皜 頃勳殧頃╇媹雼. -- ztools 韽措崝鞐 keys_template.txt毳 雱j碃 keys.txt搿 鞚措鞚 氚旉繅雼堧嫟. - 旖橃啍鞚 FW6.2氅 雼轨嫚鞚 Lockpick鞙茧 鞝勳泊 韨れ厠鞚 鞏混潉 靾 鞛堨姷雼堧嫟. - 旃滉惮臧 頃勳殧頃 鞐挫嚑毳 牍岆牑 欷 靾 鞛堨姷雼堧嫟. - xci_header_key毳 於旉皜頃橂牑氅 旃滉惮臧 攴戈矁鞚 牍岆牑欷橃暭頃╇媹雼. - https://github.com/shchmue/Lockpick/releases - -## 9. 鞝滍暅靷暛 -- 8 臧 鞚挫儊鞚 瓴岇瀯鞙茧 雼れ 旎厫旄 xci 韺岇澕鞚 毵岆摛 靾橂姅 鞐嗢姷雼堧嫟. 靾橅弶鞙茧 搿滊敥頃 霑 鞓る臧 氚滌儩頃╇媹雼. 攴戈矁鞚 qlauncher 鞝滍暅鞚检霃 氇ジ雼る澕瓿 靸濌皝頃挫劀 攴戈矁鞚 攴戈矁鞚 韰岆 mods鞕 頃粯 鞛戨彊頃橃毵 INTRO電 攴戈矁鞚 韰岇姢韸疙晿歆 鞎婌晿鞀惦媹雼. -彀戈碃: 鞚措姅 "瓴岇瀯", 鞐呺嵃鞚错姼 氚 dl car臧 頃措嫻 鞝滍暅靷暛鞚 歆韨れ 鞎婌潓鞚 鞚橂頃╇媹雼. -- 韮鞚错媭 甓岉暅 鞝滉卑 dlcs電 6.0 鞚错泟鞚 鞚茧秬 瓴岇瀯鞐 雽頃 攵堨檮鞝勴暅 雮挫毄鞚 氅旍嫓歆 頂勲‖頂勴姼毳 鞝滉车頃╇媹雼. 鞚 氅旍嫓歆電 瓯措剤 霙 靾 鞛堨溂氅 dlcs電 頂勲‖頂勴姼鞐愲弰 攵堦惮頃橁碃 鞝曥儊鞝侅溂搿 鞛戨彊頃╇媹雼. - -## 7. 臧愳偓鞕 韥爤霐 - -NSC_Builder電 雼れ潓鞚 旮半皹鞙茧頃╇媹雼. - -a.) Nut: 臧鞛 鞛姤鞛堧姅 Switch sceners 欷 頃橂倶 鞚 "blawar"鞚 鞛戩梾 鞐嗢澊電 鞚 鞁滌爯鞐愳劀 鞚 氇摖 鞛戩梾鞚 靾橅枆頃 靾 鞐嗢姷雼堧嫟. -https://github.com/blawar/nut - -b.) Hacbuild: xci repacking 頃垬電 LucaFraga臧 毵岆摖 hacbuild 旖旊摐毳 旮半皹鞙茧頃╇媹雼. - -- 鞓るΜ歆雱 hacbuild: LucaFraga鞐 鞚橅暅 https://github.com/LucaFraga/hacbuild) - -- 雮橃棎 鞚橅暣 靾橃爼霅 hacbuild: https://github.com/julesontheroad/hacbuild - -霕愴暅 鞎勲灅鞚 靷瀸霌れ棎瓴 臧愳偓頃╇媹雼: - -AnalogMan. 攴鸽姅 splitNSP.py毳 毵岆摛鞐堦碃 Horizon 順曥嫕鞙茧 攵勴暊霅 nsp (攵勴暊霅 xci 敫旊 韥赴鞕 雼る) 氚 頃勳殧頃 韽措崝毳 氤搓磤頃 頃勳殧臧 鞛堧姅 敫旊 韥赴毳 瓿勳偘頄堨姷雼堧嫟. -https://github.com/AnalogMan151/splitNSP/releases - -MadScript77鞐愱矊 攴胳潣 頉岆キ頃 鞝滌晥, 韸鬼瀳 氚办箻鞚 頂勲韺岇澕 鞎勳澊霐旍柎鞐 臧愳偓霌滊雼堧嫟. - -Liam瓿 0mn0鞚 頃儊 霃勳泙鞚 霅橃棃旮 霑岆鞐 鞓る灅霅 SH discord鞐 臧愳偓霌滊雼堧嫟. - -攴鸽摛鞚 霃勳泙瓿 膦嬱潃 鞝滌晥鞐 雽頃 evolved, Cinnabar, certain dragon鞐 臧愳偓霌滊雼堧嫟. - -XCI-Explorer鞚 鞝滌瀾鞛 StudentBlake鞐愱矊 臧愳偓鞚 毵愳潉 鞝勴暕雼堧嫟. 攴胳潣 頂勲攴鸽灗鞚 hacbuild鞐 雽頃 靾橃爼 頃潉 靿疥矊 彀眷潉 靾 鞛堨棃旮 霑岆鞛呺媹雼. - -霕愴暅 gbatemp, elotrolado.net, discord鞚 雮 旃滉惮霌れ潣 氇摖 須岇洂鞐愱矊 臧愳偓霌滊雼堧嫟. ;)