|
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 |
|