中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎样设置变量,让文本中的数字自动递增且显示出来?
作者:
标题: 怎样设置变量,让文本中的数字自动递增且显示出来? 上一主题 | 下一主题
binghejin
初级用户





积分 48
发帖 19
注册 2006-12-27
状态 离线
『楼 主』:  怎样设置变量,让文本中的数字自动递增且显示出来?

编写了一个这样的批处理
---------------------------------------------------------
@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=                是否继续? [1=继续 0=退出]
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 ]

2006-12-27 10:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 2 楼』:  

不断设置 title ?
或者 CLS 一下重新排个版?

2006-12-27 22:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
binghejin
初级用户





积分 48
发帖 19
注册 2006-12-27
状态 离线
『第 3 楼』:  

收到错误的提示了,已经改正!还望高手解答!

2006-12-28 00:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
binghejin
初级用户





积分 48
发帖 19
注册 2006-12-27
状态 离线
『第 4 楼』:  

难道我的问题写的太模糊了?
那就简单称述一下:

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

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

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

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

望高手解答!

2006-12-29 00:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 5 楼』:  


(……前面的若干代码)

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,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-12-29 00:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
binghejin
初级用户





积分 48
发帖 19
注册 2006-12-27
状态 离线
『第 6 楼』:  

好像不能实现我想要的功能啊

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

我也不是太懂 for 这个命令,麻烦给直接写成代码吧!

2006-12-29 06:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
binghejin
初级用户





积分 48
发帖 19
注册 2006-12-27
状态 离线
『第 7 楼』:  

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

难道是这样?好像也没有成功啊!

2006-12-29 06:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 8 楼』:  


@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (list.txt) do (
    set /a num+=1
    echo 正在安装第 !num! 个补丁
)
endlocal
pause




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-29 06:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 9 楼』:  

改改namejm版主的不用延迟变量,用call也OK
@echo off
for /f "delims=" %%i in (list.txt) do (
    set /a num+=1
    call echo 正在安装第 %%num%% 个补丁
)
pause


2006-12-29 06:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
binghejin
初级用户





积分 48
发帖 19
注册 2006-12-27
状态 离线
『第 10 楼』:  

各位老大啊,现在可以倒是可以显示正在安装第几个了,但还不是我要的呀,现在显示的是这样
正在安装第 1 个补丁
正在安装第 2 个补丁
正在安装第 3 个补丁
.........
全部现实完了后才开始安装。

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

能实现么?

2006-12-29 07:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tao0610
高级用户

朦胧的世界


积分 579
发帖 218
注册 2006-10-24
状态 离线
『第 11 楼』:  

加进去就行了.
@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




认识自己,降伏自己,改变自己
,才能改变别人!
2006-12-29 08:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 12 楼』:  

把文件名放入list.txt
@echo off
for /f "delims=" %%i in (list.txt) do (
    set /a num+=1
    call echo 正在安装第 %%num%% 个补丁
echo %%i
)
pause


2006-12-29 08:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
binghejin
初级用户





积分 48
发帖 19
注册 2006-12-27
状态 离线
『第 13 楼』:  

非常感谢大家的帮助,在你们的帮助下,我的问题终于解决了。

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

在这里谢谢所有帮助我的人!

2006-12-29 23:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: