标题: 在FOR循环中使用set命令导致%%i参数值失效,如何解决?
[打印本页]
作者: sgw888
时间: 2007-7-1 17:00
标题: 在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
作者: lxmxn
时间: 2007-7-1 17:09
不完整的代码。
作者: wudixin96
时间: 2007-7-1 17:17
想必应该是关于延迟环境变量问题。
作者: sgw888
时间: 2007-7-2 14:55
@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
)
)
)
作者: zh159
时间: 2007-7-2 16:32
for内部不要使用标签
作者: sgw888
时间: 2007-7-3 11:25
Quote: |
Originally posted by zh159 at 2007-7-2 04:32 PM:
for内部不要使用标签 |
|
不太明白,可不可以帮我修改一下代码????
作者: qinbuer
时间: 2007-7-3 13:49
改了一下... ...
@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
作者: sgw888
时间: 2007-7-5 14:18
楼上的代码不对,循环只执行一次.
我的目的是对所有硬盘进行判断.
作者: sgw888
时间: 2007-7-8 13:53
没有人会吗??
作者: qingfushuan
时间: 2007-7-8 14:02
刚巧我才作的,供你参考:
::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 ]
作者: sgw888
时间: 2007-7-9 12:37
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=\" ... |
|
看不明白,找不出有什么地方是可以参考的。
作者: sgw888
时间: 2007-7-14 09:06
看来只有放弃使用SET进行手动选择了.
作者: bjsh
时间: 2007-7-14 10:17
Quote: |
Originally posted by sgw888 at 2007-7-5 02:18 PM:
楼上的代码不对,循环只执行一次.
我的目的是对所有硬盘进行判断. |
|
把这个 改成 call :menu2 试试...
没怎么仔细看 只针对你说指的问题 而言