中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-27 21:07
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决] 关于计算字符串长度的批处理除BUG 查看 620 回复 5
楼 主 [已解决] 关于计算字符串长度的批处理除BUG 发表于 2008-04-17 10:04 ·  中国 广东 东莞 电信
银牌会员
★★★
积分 1,282
发帖 538
注册 2002-11-02 00:00
23年会员
UID 129
性别 男
状态 离线
防沉迷系统中的一部分:时间设置

以下批处理流程:
1、输入使用次数;
2、输入时间段;
3、计算时间段长度。

但是得不到想要的结果,请各位朋友帮忙看一下,应如何修改。谢谢!


@echo off
:start
cls
set /p nth=请输入每天使用电脑的次数:
if %nth% equ 0 cls&echo 没有限制,随意使用。&ping /n 3 127.1>nul&exit
if %nth% gtr 5 cls&echo 次数太多,返回重试!&ping /n 3 127.1>nul&goto start
:input
for /l %%i in (1,1,%nth%) do set /p nth%%i=请输入第 %%i 次使用时间段:
call :length

:length
Setlocal EnableDelayedExpansion
set nth
for /l %%i in (1,1,!nth!) do for /l %%j in (1,1,20) do if "!nth%%i:~%%j,1!"=="" if %%j neq 17 cls&echo 时间段设置出错,返回重试。&ping /n 3 127.1>nul&cls&goto input
pause>nul
Endlocal


5楼正解

[ Last edited by chishingchan on 2008-11-23 at 12:01 ]
2 发表于 2008-04-17 21:03 ·  中国 上海 电信
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
call :length %%i
for /l %%i in (1,1,!nth!) do for /l %%j in (1,1,20) do if "!nth%1:~%%j,1!"=="" if %%j neq 17

[ Last edited by moniuming on 2008-4-17 at 10:15 PM ]
3 根据2楼的方案,还是不行。 发表于 2008-04-18 07:43 ·  中国 广东 东莞 电信
银牌会员
★★★
积分 1,282
发帖 538
注册 2002-11-02 00:00
23年会员
UID 129
性别 男
状态 离线

@echo off
:start
cls
set /p nth=请输入每天使用电脑的次数:
if %nth% equ 0 cls&echo 没有限制,随意使用。&ping /n 3 127.1>nul&exit
if %nth% gtr 5 cls&echo 次数太多,返回重试!&ping /n 3 127.1>nul&goto start
:input
for /l %%i in (1,1,%nth%) do set /p nth%%i=请输入第 %%i 次使用时间段:
call :length %%i

:length
Setlocal EnableDelayedExpansion
set nth
for /l %%i in (1,1,!nth!) do for /l %%j in (1,1,20) do if "!nth%1:~%%j,1!"=="" if %%j neq 17 cls&echo 时间段设置出错,返回重试。&ping /n 3 127.1>nul&cls&goto input
pause>nul
Endlocal
4 发表于 2008-04-18 09:35 ·  中国 广西 中移铁通
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
在这里用for是不合适的,容我想想
5 发表于 2008-04-18 09:58 ·  中国 广西 中移铁通
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线

@echo off
Setlocal enabledelayedexpansion
:start
cls
set /p nth=请输入每天使用电脑的次数:
if %nth% equ 0 cls&echo 没有限制,随意使用。&ping -n 3 127.1>nul&exit
if %nth% gtr 5 cls&echo 次数太多,返回重试。&ping -n 3 127.1>nul&goto start
:input
if %nth%==0 goto :ok
set /a nth-=1
set /a times+=1
set /p time_=请输入第%times%次使用的时间段:
for /l %%a in (1 1 20) do (
if "!time_:~%%a,1!"=="" set aa=%%a&&if !aa! equ 17 (
echo.&echo 这里是要执行的命令&ping -n 3 127.1>nul&goto :input
) else (
set /a nth+=1&set /a times-=1&echo.&echo 时间段设置出错,返回重试。&ping -n 3 127.1>nul&goto :input
)
)

:ok
echo.&echo 设置完毕。&ping -n 3 127.1>nul&goto :eof
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
chishingchan +8 2008-04-18 14:18
6 发表于 2008-04-18 14:18 ·  中国 广东 东莞 电信
银牌会员
★★★
积分 1,282
发帖 538
注册 2002-11-02 00:00
23年会员
UID 129
性别 男
状态 离线
谢谢!
论坛跳转: