网上流传的一个批处理请教

来源:百度知道 编辑:UC知道 时间:2024/06/05 05:59:53
有语法错误?
这个是传说的中一个演示病毒传播的批处理,现在那个传播的那段代码不能用了,Why?也就是说你按照这样做了,你看D盘下没有100个文件夹,就最开始那一个名为“病毒”的文件夹有!呵呵~出了什么问题?语法错误???

如下:
===================
@echo off
set dir="d:\病毒\"
if exist %dir% rd %dir% /q/s
set cdir=%cd%
set soucefile=%cd%\%0
mkdir %dir%
cls
echo 看一下D盘下面
echo -
echo 是不是有一个叫做‘病毒’的文件夹
echo -
echo 接下去要做的就是‘病毒’的扩散
echo -
echo 在这里 我不扩散到别的地方,只在“病毒”这个实验目录下进行感染扩散!
echo -
cd %cdir%
pause
for /L %%a in (1 1 100) do (
@mkdir %dir%\%%a
@copy %0 %dir%\%%a\%%a-病毒副本.bat
@cls
)
cls
echo -
echo 现在
echo -
echo 可以在病毒目录下发现100个子文件夹,
echo -
echo 每个文件夹下都有病毒文件的副本!
echo -
echo 恭喜你^-^ 被感染了!!
echo -
echo 不过没事,没有做什么对不起你的事情
echo -
echo 当然,
echo -
echo 如果在这里,我把你的c:\盘下的文件感染了,我想你会哭的
echo -
echo 接下去,产生的这些“病毒”的副本,将被删除,所以不用担心;没干别的坏

你可以自己看一下你设的变量,echo %dir%结果是"d:\病毒\"
导致你的语句出错
mkdir "d:\病毒\" \1
copy test.bat "d:\病毒\" \1\1-病毒副本.bat

你只要做一个操作,把第二行代码
set dir="d:\病毒\"
换成
set dir=d:\病毒\

首先说明For的一种用法,帮助说明如下,你可以用For /?查到
FOR /L %variable IN (start,step,end) DO command [command-parameters]
该集表示以增量形式从开始到结束的一个数字序列。
因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生
序列 (5 4 3 2 1)。
所以 for /L %%a in (1 1 100) do就是如 c语言的 for(int i=1;i<=100;i++),生成1到100的循环,接下来代码我想就很容易明白了
@mkdir %dir%\%%a
@copy %0 %dir%\%%a\%%a-病毒副本.bat
对应的把变量替换就是
@mkdir %dir%\1
@copy %0 %dir%\1\1-病毒副本.bat

这里有两点需要说明的就是
%dir% 指的是环境中的当前路径
%0 就如C语言Main的参数第0个,就是这个执行Bat本身文件名。
我想这样整个循环体执行的内容就比较清晰了。