多谢!!!!
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
这是我仿照书上列子遍的*.bat文件,可运行时会出错,
请帮我看看
@echo off
choice /c:mde mem,defrag,end
if errorlevel 3 goto mem(应先判断数值最高的错误码)
if errorlevel 2 goto defrag
if errotlevel 1 goto end
:mem
mem
goto end
:defrag
c:\windows\defrag.exe
goto end
:end
echo good bye
以下是引用iceboy在2003-10-6 15:42:54的发言:
可以!最简单的方法就是用 Choice.com,复杂一点就用 Menustar、ChoiceX,或者编个小程序也行。
OS:: Solve.bat - 验证哥德巴赫猜想的程序
:: Will Sort - 2004/11/18
::
:: 从素数堆垒程序变化而来
:: 环境变量说明:
:: iTest:测试数, iPrime:素数序号
:: divisor:用以判断素数的除数, iDivisor:除数序号
:: Factor1&Factor2: 偶数的两个分解因子, iFactor1&iFicator2:因子序号
:: less: 除法中不足除的标志, diff: 减法中有差值的标志
::
@echo off
if == goto %2
if == %comspec% /e:4096 /c %0 $ init
del ~Solve.bat
goto end
:: 初始化: 产生素数2, 将它存为第一个素数, 设置循环起始值为3
:init
set iTest=I I
set iPrime=I
set %iPrime%=I I
:: 对3~n的奇数 %iTest% 与已产生的所有素数由小到大循环相除
:: 若全部未整除则将 %iTest% 存入素数 %iPrime%, 否则跳至 Solve
:: 对3~n的偶数 %iTest% 分解为已产生的两个素数之和
:: 若恰好分解则显示此偶数和两个分解因子, 否则继续循环 MainLoop
:MainLoop
rime - 判断奇数是否为素数
set iTest=I %iTest%
set iDivisor=I
rimeLoop
echo set divisor=%%%iDivisor%%%>~Solve.bat
call ~Solve.bat
call %0 $ Divide %iTest%
if "%less%"=="" goto Solve
if "%iDivisor%"=="%iPrime%" goto IsPrime
set iDivisor=I%iDivisor%
goto PrimeLoop
:IsPrime
set iPrime=I%iPrime%
set %iPrime%=%iTest%
:Solve - 将偶数分解为素数之和
set iTest=I %iTest%
set iFactor1=
:SolveLoop
set iFactor1=I%iFactor1%
if "%iFactor1%"=="I%iPrime%" goto SolveLoop
set iFactor2=%iFactor1%
:SolveSubLoop
if "%iFactor2%"=="I%iPrime%" goto SolveLoop
echo set Factor1=%%%iFactor1%%%> ~Solve.bat
echo set Factor2=%%%iFactor2%%%>>~Solve.bat
call ~Solve.bat
call %0 $ Minus %iTest%
if "%diff%"=="" goto IsSolve
set iFactor2=I%iFactor2%
goto SolveSubLoop
:IsSolve
echo %iTest%
echo %Factor1% + %Factor2%
if "%iPrime%"=="IIIIIIIII" goto end
goto MainLoop
:: 将传入的被除数 %iTest% 除以(循环减)除数 %divisor%
:: 若不足除 (无法整除) 则返回不足信号 less, 否则直接返回
ivide
for %%n in (%divisor%) do shift
if not == goto Divide
set less=
if == set less=true
goto end
:: 将传入的被减数 %iTest% 减去减数 %Factor1% 和 %Factor2%
:: 若有差值 (无法分解) 则返回相差信号 diff, 否则直接返回
:Minus
for %%n in (%Factor1%) do shift
for %%n in (%Factor2%) do shift
set diff=
if "%2"=="" set diff=true
if not "%3"=="" set diff=true
goto end
:end