中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-02 20:33
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎样设置变量,让文本中的数字自动递增且显示出来? 查看 1,174 回复 12
楼 主 怎样设置变量,让文本中的数字自动递增且显示出来? 发表于 2006-12-27 10:49 ·  中国 新疆 克拉玛依 电信
初级用户
积分 48
发帖 19
注册 2006-12-27 09:31
19年会员
UID 74692
性别 男
状态 离线
编写了一个这样的批处理
---------------------------------------------------------
@echo off
title Windows 2000 XP 系统补丁包安装程序 V1.0
COLOR 1f
MODE con: COLS=70 LINES=30
if "%1"=="h" goto help
if "%1"=="" goto 1
:1
if not exist WindowsXP-*.* goto er1
if exist list.txt goto ertxt
if exist ks.bat goto erbat
if exist *.exe goto baohu
goto anzhuang
:ertxt
echo.
echo.
echo.
echo 检测到有非正常退出,正在修复...
del list.txt>nul
goto 1
:erbat
echo.
echo.
echo.
echo 检测到有非正常退出,正在修复...
del ks.bat>nul
goto 1
:baohu
echo.
echo.
echo.
echo 系统补丁程序目前的状态为 易被病毒感染
echo.
echo 正在执行保护机制,请稍候...
ren *.exe *.ccc>nul
if exist *.exe goto baohu
goto anzhuang
:anzhuang
cls
echo.
echo.
echo.
echo =======================================
echo Windows 2000 XP 系统补丁包安装程序 V1.0
echo.
echo         编写:XX
echo.
echo        2006年12月26日
echo =======================================
echo.
set /p v= 是否继续?
if %v%==1 goto st
if %v%==0 goto exist
echo.
echo 输入无效,请重新输入...
goto anzhuang
:st
echo.
echo 正在解除补丁包的保护,安装完毕后自动启动保护机制...
ren *.ccc *.exe>nul
echo.
echo 正在创建补丁包列表,请稍候...
dir /b *.exe>list.txt
echo.
echo 创建列表成功,开始安装...
echo.
echo 开始安装...
echo @echo off>ks.bat
for /f %%a in (list.txt) do echo %%a/u>>ks.bat
call ks.bat
echo.
echo 安装完毕...
echo.
echo 正在删除临时文件...
del ks.bat>nul
del list.txt>nul
echo.
echo 正在执行保护机制,请稍候...
ren *.exe *.ccc>nul
goto end
:er1
echo.
echo 没有发现系统补丁程序,请检查...
goto end
:help
echo ================================================
echo.
echo 本程序可以完全自动的安装系统补丁包
echo.
echo 本程序只能运行在Windows 2000及XP系统下
echo.
echo 您需要做的就是把系统补丁程序放置在本程序的目录下
echo.
echo 然后执行setup.bat文件即可
echo.
echo 本程序会自动识别安装文件并且自动安装
echo.
echo 本程序只有一个执行文件绝对绿色
echo.
echo 有任何疑问或建议欢迎和我联系 QQ:82565161
echo.
echo ================================================
echo ================================================
echo.
echo 如果在安装过程中,系统不断的给出同一个提示
echo.
echo 并不是程序的错误,而是程序在运行保护机制而
echo.
echo 需要保护的系统补丁程序正在被安装,或者正在
echo.
echo 被别的程序使用,您只需要耐心的等到该文件被
echo.
echo 释放。
:end
echo.
pause
:exist
color
cls
----------------------------------------------------------------------------------------------
目前基本上已经可以用了,
但是想增加这样的功能:

在安装开始的时候,显示"正在安装第 1 个系统补丁..."
然后安装第2个的时候,自动变成"正在安装第 1 个系统补丁..."

[ Last edited by namejm on 2006-12-28 at 11:10 AM ]
2 发表于 2006-12-27 22:01 ·  中国 江苏 苏州 联通
银牌会员
★★★
积分 1,181
发帖 533
注册 2006-08-14 12:54
19年会员
UID 60484
状态 离线
不断设置 title ?
或者 CLS 一下重新排个版?
3 发表于 2006-12-28 00:43 ·  中国 新疆 克拉玛依 电信
初级用户
积分 48
发帖 19
注册 2006-12-27 09:31
19年会员
UID 74692
性别 男
状态 离线
收到错误的提示了,已经改正!还望高手解答!
4 发表于 2006-12-29 00:07 ·  中国 新疆 克拉玛依 电信
初级用户
积分 48
发帖 19
注册 2006-12-27 09:31
19年会员
UID 74692
性别 男
状态 离线
难道我的问题写的太模糊了?
那就简单称述一下:

就是我的批处理目的是要运行一个批处理文件所在的目录下的所有补丁程序,方法是使用dir /b 输出一个列表.然后再安装.

但是现在的问题是在安装的时候屏幕上没有相应的提示.

我想达到的目的就是:在安装列表里面的第 1 个补丁的时候,屏幕显示:正在安装第 1 个补丁"

然后安装第 2 个的时候,又显示是在安装第 2 个,以此类推,直到安装完毕!

望高手解答!
5 发表于 2006-12-29 00:21 ·  中国 北京 东城区 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线


(……前面的若干代码)

echo @echo off>ks.bat

:: 原语句: for /f %%a in (list.txt) do echo %%a/u>>ks.bat
:: 修改后:

for /f %%a in (list.txt) do (
Title 正在安装补丁 %%a ....请稍等.........
echo %%a/u>>ks.bat
)

call ks.bat

(……后面的若干代码)



Title 是设置CMD当前窗口的标题~:)
   见 Title /? 帮助信息~:)

大概原理,就是输出到要Call来执行安装补丁包的过程中,再插入一个设置显示窗口标题的命令,这样先显示标题,然后就安装……

如果不喜欢 Title 显示标题的方式,就 Echo 显示正在安装哪一个补丁,变量取自%%a ~:)

如果希望递增数字: set /a a+=1
          Echo %a%
          以后每运行一次 set /a a+=1 命令,则 %a% 中的数字就会递增1。

[ Last edited by redtek on 2006-12-28 at 11:28 AM ]
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
6 发表于 2006-12-29 06:15 ·  中国 新疆 克拉玛依 电信
初级用户
积分 48
发帖 19
注册 2006-12-27 09:31
19年会员
UID 74692
性别 男
状态 离线
好像不能实现我想要的功能啊

我想要的是:在安装第 1 个的时候显示 1 ,而在安装第 2 个的时候显示 2 啊,

我也不是太懂 for 这个命令,麻烦给直接写成代码吧!
7 发表于 2006-12-29 06:25 ·  中国 新疆 克拉玛依 电信
初级用户
积分 48
发帖 19
注册 2006-12-27 09:31
19年会员
UID 74692
性别 男
状态 离线
for /f %%a in (list.txt) do (
set /a a+=1
    echo 正在安装第 %a% 个补丁
echo %%a/u>>ks.bat

难道是这样?好像也没有成功啊!
8 发表于 2006-12-29 06:27 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (list.txt) do (
set /a num+=1
echo 正在安装第 !num! 个补丁
)
endlocal
pause
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
9 发表于 2006-12-29 06:31 ·  中国 河南 许昌 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
改改namejm版主的不用延迟变量,用call也OK

@echo off
for /f "delims=" %%i in (list.txt) do (
set /a num+=1
call echo 正在安装第 %%num%% 个补丁
)
pause
10 发表于 2006-12-29 07:57 ·  中国 新疆 克拉玛依 电信
初级用户
积分 48
发帖 19
注册 2006-12-27 09:31
19年会员
UID 74692
性别 男
状态 离线
各位老大啊,现在可以倒是可以显示正在安装第几个了,但还不是我要的呀,现在显示的是这样
正在安装第 1 个补丁
正在安装第 2 个补丁
正在安装第 3 个补丁
.........
全部现实完了后才开始安装。

我要的是在安装第 1 个的时候显示
正在安装第 1 个补丁..
然后安装,装完了后变成
正在安装第 2 个补丁
然后安装第 2 个。
.................

能实现么?
11 发表于 2006-12-29 08:15 ·  中国 北京 朝阳区 联通
高级用户
★★
朦胧的世界
积分 579
发帖 218
注册 2006-10-24 04:29
19年会员
UID 67972
状态 离线
加进去就行了.


@echo off
for /f "delims=" %%i in (list.txt) do (
set /a num+=1
call echo echo 正在安装第 %%num%% 个补丁>>ks.bat
echo %%a/u>>ks.bat
)

pause

认识自己,降伏自己,改变自己
,才能改变别人!
12 发表于 2006-12-29 08:16 ·  中国 河南 许昌 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
把文件名放入list.txt

@echo off
for /f "delims=" %%i in (list.txt) do (
set /a num+=1
call echo 正在安装第 %%num%% 个补丁
echo %%i
)
pause
13 发表于 2006-12-29 23:52 ·  中国 新疆 克拉玛依 电信
初级用户
积分 48
发帖 19
注册 2006-12-27 09:31
19年会员
UID 74692
性别 男
状态 离线
非常感谢大家的帮助,在你们的帮助下,我的问题终于解决了。

代码使用的是11楼的代码!

在这里谢谢所有帮助我的人!
论坛跳转: