中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 在FOR循环中使用set命令导致%%i参数值失效,如何解决?
作者:
标题: 在FOR循环中使用set命令导致%%i参数值失效,如何解决? 上一主题 | 下一主题
sgw888
初级用户





积分 86
发帖 33
注册 2007-6-30
状态 离线
『楼 主』:  在FOR循环中使用set命令导致%%i参数值失效,如何解决?

我在使用FOR循环的时候,中间,又使用SET命令,让用户输入,结果导致循环不能正常运行了,该如何解决??

部分代码如下:

for %%i in (d e f g h i j k l m n o p q r s t u v w x y z) do (
   fsutil fsinfo drivetype %%i: | findstr "固定" >nul 2>nul && (
if not exist %%i:\autorun.inf\nul if exist %%i:\autorun.inf (
:menu2
%%i:
cls
echo                      +++++++++++++++++++
echo                      ++ %%i: 盘上发现autorun.inf文件!! ++
echo                      ++硬盘可能已被U盘autorun病毒感染++
echo                      ++是否强行删除autorun.inf文件, ++
echo                      ++并进行免疫?                  ++
echo                      ++ 输入^(Y^) 继续 输入[N]取消操作 ++
echo                      +++++++++++++++++++
shift
set choose =
set /p choose=请选择:
if '%choose%'=='y' goto jixu
if '%choose%'=='Y' goto jixu
if '%choose%'=='N' goto quxiao
if '%choose%'=='n' goto quxiao  else goto Wrong

2007-7-1 17:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

不完整的代码。

2007-7-1 17:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 3 楼』:  

想必应该是关于延迟环境变量问题。

2007-7-1 17:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sgw888
初级用户





积分 86
发帖 33
注册 2007-6-30
状态 离线
『第 4 楼』:  

@echo off
color 0a
title U盘autorun病毒免疫
mode con lines=20
@echo off
for %%i in (d e f g h i j k l m n o p q r s t u v w x y z) do (
   fsutil fsinfo drivetype %%i: | findstr "固定" >nul 2>nul && (
if not exist %%i:\autorun.inf\nul if exist %%i:\autorun.inf (
:menu2
%%i:
cls
echo                      +++++++++++++++++++
echo                      ++ %%i: 盘上发现autorun.inf文件!! ++
echo                      ++硬盘可能已被U盘autorun病毒感染++
echo                      ++是否强行删除autorun.inf文件, ++
echo                      ++并进行免疫?                  ++
echo                      ++ 输入[Y] 继续 输入[N]取消操作 ++
echo                      +++++++++++++++++++
shift
set choose =
set /p choose=请选择:
if '%choose%'=='y' goto jixu
if '%choose%'=='Y' goto jixu
if '%choose%'=='N' goto quxiao
if '%choose%'=='n' goto quxiao  else goto Wrong
:Wrong
cls
echo                            +++++++++++++
echo                          +   输入错误!任意键重试!+
echo                          + BY  天使   QQ:58198859  +
echo                            +++++++++++++
pause>nul
goto menu2
:jixu
del \autorun.inf /a /f
md  \autorun.inf \autorun.inf\prn\  \autorun.inf\病毒免疫文件夹请不要删除!..\
if exist \autorun.inf\nul  (cls
echo                     autorun.inf文件夹[病毒免疫文件夹]创建成功! ) else (
cls
echo                     autorun.inf文件夹[病毒免疫文件夹]创建失败! )
:quxiao
echo off
)
)
)

2007-7-2 14:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




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

for内部不要使用标签



2007-7-2 16:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sgw888
初级用户





积分 86
发帖 33
注册 2007-6-30
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by zh159 at 2007-7-2 04:32 PM:
for内部不要使用标签

不太明白,可不可以帮我修改一下代码????

2007-7-3 11:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qinbuer
高级用户

我思故我在


积分 512
发帖 228
注册 2007-1-21
状态 离线
『第 7 楼』:  

改了一下... ...

@echo off
color 0a
title U盘autorun病毒免疫
mode con lines=20
for %%i in (d e f g h i j k l m n o p q r s t u v w x y z) do (
fsutil fsinfo drivetype %%i: | findstr "固定" >nul 2>nul && (
  if not exist %%i:\autorun.inf\nul (if exist %%i:\autorun.inf set var=%%i & goto menu2) else echo %%i: 已经免疫
    )
  )
goto quxiao

:menu2
var:
cls
echo                      +++++++++++++++++++
echo                      ++ %var%:盘上发现autorun.inf文件!! ++
echo                      ++硬盘可能已被U盘autorun病毒感染++
echo                      ++是否强行删除autorun.inf文件, ++
echo                      ++并进行免疫?                  ++
echo                      ++ 输入[Y] 继续 输入[N]取消操作 ++
echo                      +++++++++++++++++++
shift
set choose =
set /p choose=请选择:
if /i '%choose%'=='y' goto jixu
if /i '%choose%'=='n' goto quxiao
goto Wrong
:Wrong
cls
echo                            +++++++++++++
echo                          +   输入错误!任意键重试!+
echo                          + BY  天使   QQ:58198859  +
echo                            +++++++++++++
pause>nul
goto menu2
:jixu
del \autorun.inf /a /f
md  \autorun.inf \autorun.inf\prn\  \autorun.inf\病毒免疫文件夹请不要删除!..\
if exist \autorun.inf\nul  (cls
echo                     autorun.inf文件夹[病毒免疫文件夹]创建成功! ) else (
cls
echo                     autorun.inf文件夹[病毒免疫文件夹]创建失败! )
:quxiao
pause



我确实是只菜鸟,而且这里X人太多,所以我不敢装X。谁要再说我装X,我就XXOO他。
2007-7-3 13:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sgw888
初级用户





积分 86
发帖 33
注册 2007-6-30
状态 离线
『第 8 楼』:  

楼上的代码不对,循环只执行一次.
我的目的是对所有硬盘进行判断.

2007-7-5 14:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sgw888
初级用户





积分 86
发帖 33
注册 2007-6-30
状态 离线
『第 9 楼』:  

没有人会吗??

2007-7-8 13:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qingfushuan
高级用户





积分 502
发帖 327
注册 2006-12-30
状态 离线
『第 10 楼』:  

刚巧我才作的,供你参考:
::qingfushuan cn-dos xp@cmd 2007-06-24
@echo off &setlocal EnableDelayedExpansion
color 2f
::没安装就先安装rar
for /f "delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
    for /f %%j in ('fsutil fsinfo drivetype %%i ^|find "CD-ROM"') do (
       if not exist "%systemdrive%Program Files\winrar\rar.exe" start /w %%j\soft\wrar342sc.exe
    )
)
:MENU
cls
echo.
echo   qingfushuan cn-dos xp@cmd 2007-06-24  qq:4768821 email:qingfushuan@tom.com                     
echo                       "天 下 第 一 懒 P" 主 选 择 菜 单
echo.
echo     ************************************************************
echo     *     01.  --a      创建一个系统管理员                                          *
echo     *     02.  --b      全盘删除默认共享.转移我的文档等                       *
echo     *     03.  --c      配置IP,网关.DNS设置; 网络.连接安装向导              *
echo     *     04.  --d      禁用.停止xp的危险服务                                      *
echo     *     05.  --e      导入一个cmdshell在鼠标右键菜单                         *
echo     *     06.  --f      显示.系统属性                                                   *
echo     *     07.  --g      做个关机脚本清空垃圾文件                                 *
echo     *     08.  --h      搜索光盘.拷贝.解压.安装程序                              *
echo     *     09.  --i      用360Safe下载补丁并安装虚拟软驱                       *
echo     *     10.  --j      深度出的优化工具                                              *
echo     *     11.  --k      安全中心                                                         *
echo     *     12.  --l      全部选择(b-i)                                                    *
echo     *     13.  --r      重启电脑                                                         *
echo     *     14.  --q      直接退出                                                        *
echo     ************************************************************
echo.
:cho
SET XZ1=
set /P xz1=       请选择(a,b,c,d,e,f,g,h,i,j,k,l,m,q):
if /I "%xz1%"=="q" goto END
if /I "%xz1%"=="r" goto 13
if /I "%xz1%"=="l" goto 12
if /I "%xz1%"=="k" goto 11
if /I "%xz1%"=="j" goto 10
if /I "%xz1%"=="i" goto 09
if /I "%xz1%"=="h" goto 08
if /I "%xz1%"=="g" goto 07
if /I "%xz1%"=="f" goto 06
if /I "%xz1%"=="e" goto 05
if /I "%xz1%"=="d" goto 04
if /I "%xz1%"=="c" goto 03
if /I "%xz1%"=="b" goto 02
if /I "%xz1%"=="a" goto 01
echo 选择无效,请重新输入
echo.
goto cho
[ Last edited by qingfushuan on 2007-7-8 at 02:03 PM ]

2007-7-8 14:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sgw888
初级用户





积分 86
发帖 33
注册 2007-6-30
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by qingfushuan at 2007-7-8 02:02 PM:
刚巧我才作的,供你参考:

[code]
::qingfushuan cn-dos xp@cmd 2007-06-24
@echo off &setlocal EnableDelayedExpansion
color 2f
::没安装就先安装rar
for /f "delims=\" ...

看不明白,找不出有什么地方是可以参考的。

2007-7-9 12:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sgw888
初级用户





积分 86
发帖 33
注册 2007-6-30
状态 离线
『第 12 楼』:  

看来只有放弃使用SET进行手动选择了.

2007-7-14 09:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by sgw888 at 2007-7-5 02:18 PM:
楼上的代码不对,循环只执行一次.
我的目的是对所有硬盘进行判断.



  Quote:
goto menu2

把这个 改成 call :menu2 试试...
没怎么仔细看 只针对你说指的问题 而言

2007-7-14 10:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: