Batch file 为什么这个脚本不工作?如何修复它?

Batch file 为什么这个脚本不工作?如何修复它?,batch-file,Batch File,需要帮助时,我编写了一个脚本,在选择“是”后,应该结合SVCHOST进程的数量,不幸的是,由于我不知道的原因,选择的脚本不能正常工作,不能正确地在注册表中进行更改,但是没有选择“是”或“否”的相同代码可以完美地工作,或者我可以请求帮助 可选择是或否的脚本: @echo off mode con:cols=90 lines=30 chcp 65001 color 0C title System Config Tool - krok 12/x - Compress Svchost cls ech

需要帮助时,我编写了一个脚本,在选择“是”后,应该结合SVCHOST进程的数量,不幸的是,由于我不知道的原因,选择的脚本不能正常工作,不能正确地在注册表中进行更改,但是没有选择“是”或“否”的相同代码可以完美地工作,或者我可以请求帮助

可选择是或否的脚本:

@echo off
mode con:cols=90 lines=30
chcp 65001
color 0C

title System Config Tool -  krok 12/x - Compress Svchost
cls
echo ╔════════════════════════════════════════════════════════════════════════════════════════╗
echo ║                                                                                        ║
echo ║                                     Compress SVCHOST?                                  ║
echo ║                                                                                        ║
echo ║                                                                                        ║
echo ║                           [1]-YES                     [2]-NO                           ║
echo ║                                                                                        ║
echo ║                                                                                        ║
echo ╚════════════════════════════════════════════════════════════════════════════════════════╝
choice /n /c:12 /M ""
IF %ERRORLEVEL%==1 (
cls
echo ╔════════════════════════════════════════════════════════════════════════════════════════╗
echo ║                                                                                        ║
echo ║                           Should the system make SVCHOST connection?                   ║
echo ║                                                                                        ║
echo ║                                                                                        ║
echo ║                                              WORKING...                                ║
echo ║                                                                                        ║
echo ║                                                                                        ║
echo ╚════════════════════════════════════════════════════════════════════════════════════════╝


chcp 65001 >nul
for /f "tokens=4 delims= " %%i in ('systeminfo ^| findstr /C:"Total Physical Memory"') do (set mem=%%i)
call :calc %mem%
reg add "HKLM\SYSTEM\ControlSet001\Control" /v "SvcHostSplitThresholdInKB" /t REG_DWORD /d "%mem_kb%" /f
goto x
:calc
set "mem_gb=%~1"
set /a "mem_kb=%mem_gb%*1024*1024"
goto :eof
)ELSE IF %ERRORLEVEL%==2 (
    
goto x
)
:x
title System Config Tool  - step 13/x - End Screen
cls
echo ╔════════════════════════════════════════════════════════════════════════════════════════╗
echo ║                                                                                        ║
echo ║                     Thank you for using the Configurator                               ║
echo ║                                                                                        ║
echo ║                                                                                        ║
echo ║                                                                                        ║
echo ║                   Press Enter                                                          ║
echo ║                                                                                        ║
echo ╚════════════════════════════════════════════════════════════════════════════════════════╝
pause > nul
不带是或否的脚本:

@echo off
chcp 65001 >nul
for /f "tokens=4 delims= " %%i in ('systeminfo ^| findstr /C:"Total Physical Memory"') do (set mem=%%i)
call :calc %mem%
reg add "HKLM\SYSTEM\ControlSet001\Control" /v "SvcHostSplitThresholdInKB" /t REG_DWORD /d "%mem_kb%" /f
exit
:calc
set "mem_gb=%~1"
set /a "mem_kb=%mem_gb%*1024*1024"

下面是一个批处理文件方法的示例,包括所有无意义的边框等

这使用
powershell
获取物理内存大小(KB),而不是非常慢的
systeminfo
方法和
set/a
(其整数数学不太可能在超过两GB的内存中工作)。通过简单地删除不必要的代码块,我已经消除了在括号内的代码块中添加标签的必要性。我还将不必要的代码页更改删除为
65001
,因为方框图字符应该存在于最常见的代码页中。最后,我将注册表项从
ControlSet001
更改为
CurrentControlSet
,因为您无法知道最终用户正在使用哪个控件集

@Echo关闭
SetLocal EnableExtensions DisableDelayedExpansion
%SystemRoot%\System32\mode.com Con:Cols=90行=30行
颜色0C
标题系统配置工具-krok 12/x-压缩Svchost
ClS
回音╔════════════════════════════════════════════════════════════════════════════════════════╗
回音║                                                                                        ║
回音║                                    压缩SVC主机?║
回音║                                                                                        ║
回音║                                                                                        ║
回音║                           [1] -是[2]-否║
回音║                                                                                        ║
回音╚════════════════════════════════════════════════════════════════════════════════════════╝
%SystemRoot%\System32\choice.exe/C 12/N
如果错误级别2转到:x
ClS
回音╔════════════════════════════════════════════════════════════════════════════════════════╗
回音║                                                                                        ║
回音║                       系统是否应建立SVCMost连接?║
回音║                                                                                        ║
回音║                                                                                        ║
回音║                                       工作║
回音║                                                                                        ║
回音╚════════════════════════════════════════════════════════════════════════════════════════╝
对于(“%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe-NoProfile)中的/F%%G
“(获取CimInstance-Class“Cim_PhysicalMemory”|测量容量-Sum).Sum/1KB”
)是否%SystemRoot%\System32\reg.exe添加“HKLM\SYSTEM\CurrentControlSet\Control”/V^
“SvcHostSplitThresholdInKB”/T REG_DWORD/D“%%G”/F 1>NUL
:x
标题系统配置工具-步骤13/x-结束屏幕
ClS
回音╔════════════════════════════════════════════════════════════════════════════════════════╗
回音║                                                                                        ║
回音║                          感谢您使用配置程序║
回音║                                                                                        ║
回音║                                                                                        ║
回音║                                 按任意键关闭║
回音║                                                                                        ║
回音╚════════════════════════════════════════════════════════════════════════════════════════╝
暂停1>NUL

您的主要问题是在括号内的代码块中使用标签。将标有
:calc
标签的部分移动到另一个位置。不幸的是,它不起作用。我没有说这是您唯一的问题!Kamil Sanik,我注意到您已登录此网站返回,但尚未回复我之前的评论或我的官方答复。请查看以了解在此场景中您可以选择哪些选项,因为没有可接受答案的问题不会被此网站视为已回答。