中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 23:44
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何取值 查看 949 回复 6
楼 主 如何取值 发表于 2007-09-30 01:56 ·  中国 广东 广州 白云区 电信
初级用户
★★
积分 132
发帖 59
注册 2007-08-23 21:24
18年会员
UID 95705
性别 男
来自 GuangZhou
状态 离线
echo 第%times%次猜%UserInput%>>Temp.txt

Temp.txt 内容

第1次猜30
第2次猜40
第3次猜50
第4次猜60


当times=4时
请问如何取上一次(即第3次的值 50)呢?
find /n 返回 [3]第3次50
但如何去定义这个值呢?
想了很久 的确很菜
2 发表于 2007-09-30 04:16 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
不知所云
3 发表于 2007-09-30 17:05 ·  中国 北京 中国科学院研究生院玉泉四公寓
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
Originally posted by Nickey at 2007-9-30 01:56:
echo 第%times%次猜%UserInput%>>Temp.txt

Temp.txt 内容

第1次猜30
第2次猜40
第3次猜50
第4次猜60


当times=4时
请问如何取上一次(即第3次的值 50)呢 ...




for /f "delims= tokens=1,2* skip=2" %%a in ('find /n temp.txt') do (
set x=%a
if "!x!" equ "!times!" &&set /a output=x-1 &goto :eof
)

echo 上一次的值为 %output%.


不知道符不符合你的要求!
没有测试,有问题跟帖!
4 发表于 2007-09-30 19:48 ·  中国 广东 广州 白云区 电信
初级用户
★★
积分 132
发帖 59
注册 2007-08-23 21:24
18年会员
UID 95705
性别 男
来自 GuangZhou
状态 离线
没有 就为这个
想了一整晚想不出来
思路就是每次都将上一次的结果记录下来
这样当下一次提示的时候就会提示上一次与本次之间的取值范围
这个确实是很无聊
但旨在学习批处理

×××××××××××××××××××××××××××××××××××××××××××××××
@echo off
mode con: cols=50 lines=15
title 猜数字小游戏---by joppY
color 0a
setlocal enabledelayedexpansion
del Temp.txt

REM 初始界面
:begin
cls
echo.
echo ╭─────────────────╮
echo │ │
echo │ 猜 数 字 小 游 戏 │
echo │ │
echo │ By joppY │
echo │ │
echo ╰─────────────────╯
echo.

REM 产生随机数,并控制在0~100之间
set /a PUZZLE=%random%%%100
REM 初始化变量
set UserInput=""
set /a TIMES=0

REM 游戏例程
:game
set /p UserInput=请输入0~100之间的一个数字:
set /a TIMES+=1
REM 简单检测用户输入是否合法
echo %UserInput% | findstr "[0-9]" || goto error
echo %UserInput% | findstr /I "[a-z]" && goto error
if %UserInput% GTR 100 goto overflow
if %UserInput% LSS 0 goto underflow
REM echo %PUZZLE%

echo 第%TIMES%次猜%UserInput%>>Temp.txt
for /f %%i in (Temp.txt) do set To=%%i

REM 判断用户输入
if %UserInput% GTR %PUZZLE% goto toobig
if %UserInput% LSS %PUZZLE% goto toosmall
if %UserInput% EQU %PUZZLE% goto bingo

:toobig
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 太大了! │
echo │ │
echo │ │
echo ╰─────────────────╯
echo 数字介乎 %To% ~ %UserInput% 之间
echo.
goto game

:toosmall
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 太小了! │
echo │ │
echo │ │
echo ╰─────────────────╯
echo 数字介乎 %UserInput% ~ %To% 之间
echo.
goto game

:bingo
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶〕Bingo! 你猜中了! │
echo │ │
echo │ │
echo ╰─────────────────╯
echo.
color cf
ping -n 1 127.1>nul
color fc
ping -n 1 127.1>nul
color cf
ping -n 1 127.1>nul
color fc
ping -n 1 127.1>nul
color 0a
echo.
set /p UserChoice=退出请按q,继续请按其他键...
if /I %UserChoice%==q del Temp.txt goto end
goto begin

REM 处理异常
:error
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 拜托,请输入数字! │
echo │ │
echo │ │
echo ╰─────────────────╯
echo.
goto game
:overflow
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 你给的数>100了! │
echo │ │
echo │ │
echo ╰─────────────────╯
echo.
goto game
:underflow
cls
echo.
echo 第【!TIMES!】次
echo ╭─────────────────╮
echo │ │
echo │ ∶( 你给的数<0了! │
echo │ │
echo │ │
echo ╰─────────────────╯
echo.
goto game

REM 退出
:end
cls
echo.
echo.
echo ╭─────────────────╮
echo │ │
echo │ 欢迎下次来玩,Bye Bye~ │
echo │ │
echo │ │
echo ╰─────────────────╯
echo.
del Temp.txt
ping -n 2 127.1>nul
exit
×××××××××××××××××××××××××××××××××××××××××××××××
5 发表于 2007-09-30 20:00 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
将上一次的值保存到一个变量里(不用读文本)……
6 发表于 2007-09-30 20:21 ·  中国 广东 广州 白云区 电信
初级用户
★★
积分 132
发帖 59
注册 2007-08-23 21:24
18年会员
UID 95705
性别 男
来自 GuangZhou
状态 离线
真的不懂耶
不懂就问 总有一天我都会变成大鸟
7 发表于 2007-09-30 20:49 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
@echo off
:Loop
Set /p UserInput=请输入0~100之间的一个数字:
Echo 上次输入是%LastNumber%,本次输入为%UserInput%
Set /a TIMES+=1
Set LastNumber=%UserInput%
Goto Loop
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
Nickey +1 2007-09-30 20:53
论坛跳转: