中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-05 10:09
48,037 主题排行 / 350,122 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 在FOR循环中使用set命令导致%%i参数值失效,如何解决?
可打印版本  1,318 / 12
第1楼 sgw888 发表于 2007-07-01 17:00
初级用户 发帖 33 积分 86
在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
第2楼 lxmxn 发表于 2007-07-01 17:09
版主 发帖 4,938 积分 11,386
不完整的代码。
第3楼 wudixin96 发表于 2007-07-01 17:17
银牌会员 发帖 931 积分 1,928
想必应该是关于延迟环境变量问题。
第4楼 sgw888 发表于 2007-07-02 14:55
初级用户 发帖 33 积分 86
@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
)
)
)
第5楼 zh159 发表于 2007-07-02 16:32
金牌会员 发帖 1,467 积分 3,687
for内部不要使用标签
第6楼 sgw888 发表于 2007-07-03 11:25
初级用户 发帖 33 积分 86
Originally posted by zh159 at 2007-7-2 04:32 PM:
for内部不要使用标签

不太明白,可不可以帮我修改一下代码????
第7楼 qinbuer 发表于 2007-07-03 13:49
高级用户 发帖 228 积分 512
改了一下... ...

@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
第8楼 sgw888 发表于 2007-07-05 14:18
初级用户 发帖 33 积分 86
楼上的代码不对,循环只执行一次.
我的目的是对所有硬盘进行判断.
第9楼 sgw888 发表于 2007-07-08 13:53
初级用户 发帖 33 积分 86
没有人会吗??
第10楼 qingfushuan 发表于 2007-07-08 14:02
高级用户 发帖 327 积分 502
刚巧我才作的,供你参考:



[ Last edited by qingfushuan on 2007-7-8 at 02:03 PM ]
第11楼 sgw888 发表于 2007-07-09 12:37
初级用户 发帖 33 积分 86
Originally posted by qingfushuan at 2007-7-8 02:02 PM:
刚巧我才作的,供你参考:

第12楼 sgw888 发表于 2007-07-14 09:06
初级用户 发帖 33 积分 86
看来只有放弃使用SET进行手动选择了.
第13楼 bjsh 发表于 2007-07-14 10:17
银牌会员 发帖 621 积分 2,000
Originally posted by sgw888 at 2007-7-5 02:18 PM:
楼上的代码不对,循环只执行一次.
我的目的是对所有硬盘进行判断.


goto menu2


把这个 改成 call :menu2 试试...
没怎么仔细看 只针对你说指的问题 而言
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023