c语言循环移位中cmd窗口的循环

【图文】C语言循环结构程序设计实例(高二)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
C语言循环结构程序设计实例(高二)
上传于||文档简介
&&C​语​言​循​环​结​构​程​序​设​计​实​例
大小:1.04MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢【讨论】请问只用CMD的窗口,怎么能让界面吸引眼球一点?_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:480,170贴子:
【讨论】请问只用CMD的窗口,怎么能让界面吸引眼球一点?收藏
只考虑使用CMD窗口,也就是黑白两色。能做出什么效果显得跟死板的不太一样,能吸引眼球呢?我能想到的是使用制表符和ascii符号制作边框 和 用字符制作字符画。还有其他的吗?希望大家多建言!
c语言,达内上市公司出品,0元试学,不就业免费重修;c语言,先就业后付款,80天从0到精通,入职名企!
#include&iostream&#include&windows.h&int main(){
int i,j,k;
char temp = 32;
char fuck[18][80] = {&
┏┛┻━━━┛┻┓ &,
┃ ┳┛ ┗┳
┗━━━┓&,
微服私访┏┛&,
┗┓┓┏━┳┓┏┛&,
system(&color 6f&);
for(j = 30;j &= 0; j--)
for(i = 0;i &= 17; i++)
for(k=0;k&=j;k++)
cout&&fuck[i]&&
Sleep(300);
system(&cls&);
return 0;}
ascii art : bad apple怎么样。还有谁说cmd就只能黑白的,可以用好多颜色的
system(&color f5&);f5可以替换,控制台自己查下
青铜星玩家
百度移动游戏玩家均可认证(限百度账号),
干嘛要用cmd我就不用考虑这么多
CMD能不能做出滚动字幕的效果呀?
控制台一样有窗口句柄,有DC
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或12310人阅读
Windows(23)
echo、@、call、pause、rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起。&
==== 注 ===========&
首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符:&
CR(0D) 命令行结束符&
Escape(1B) ANSI转义字符引导符&
Space(20) 常用的参数界定符&
Tab(09) ; = 不常用的参数界定符&
+ COPY命令文件连接符&
* ? 文件通配符&
&& 字符串界定符&
| 命令管道符&
& & && 文件重定向符&
@ 命令行回显屏蔽符&
/ 参数开关引导符&
: 批处理标签引导符&
% 批处理变量引导符&
其次, :: 确实可以起到rem 的注释作用, 而且更简洁有效; 但有两点需要注意:&
第一, 除了 :: 之外, 任何以 :开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容, 只是为了与正常的标号相区别, 建议使用 goto 所无法识别的标号, 即在 :后紧跟一个非字母数字的一个特殊符号.&
第二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态, 因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中.&
=====================&
echo 表示显示此命令后的字符&
echo off 表示在此语句后所有运行的命令都不显示命令行本身&
@与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。&
call 调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。&
pause 运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续&
rem 表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。&
==== 注 =====&
此处的描述较为混乱, 不如直接引用个命令的命令行帮助更为条理&
-------------------------&
当程序运行时,显示或隐藏批处理程序中的正文。也可用于允许或禁止命令的回显。&
在运行批处理程序时,MS-DOS一般在屏幕上显示(回显)批处理程序中的命令。&
使用ECHO命令可关闭此功能。&
ECHO [ON|OFF]&
若要用echo命令显示一条命令,可用下述语法:&
echo [message]&
指定是否允许命令的回显。若要显示当前的ECHO的设置,可使用不带参数的ECHO&
指定让MS-DOS在屏幕上显示的正文。&
-------------------&
从一个批处理程序中调用另一个批处理程序,而不会引起第一个批处理的中止。&
CALL [drive:][path]filename [batch-parameters]&
[drive:][path]filename&
指定要调用的批处理程序的名字及其存放处。文件名必须用.BAT作扩展名。&
batch-parameters&
指定批处理程序所需的命令行信息。&
-------------------------------&
暂停批处理程序的执行并显示一条消息,提示用户按任意键继续执行。只能在批处&
理程序中使用该命令。&
在批处理文件或CONFIG.SYS中加入注解。也可用REM命令来屏蔽命令(在CONFIG.SYS&
中也可以用分号 ; 代替REM命令,但在批处理文件中则不能替代)。&
REM [string]&
指定要屏蔽的命令或要包含的注解。&
=======================&
例1:用edit编辑a.bat文件,输入下列内容后存盘为c:\a.bat,执行该批处理文件后可实现:将根目录中所有文件写入 a.txt中,启动UCDOS,进入WPS等功能。&
批处理文件的内容为: 命令注释:&
@echo off 不显示后续命令行及当前命令行&
dir c:\*.* &a.txt 将c盘文件列表写入a.txt&
call c:\ucdos\ucdos.bat 调用ucdos&
echo 你好 显示&你好&&
pause 暂停,等待按键继续&
rem 准备运行wps 注释:准备运行wps&
cd ucdos 进入ucdos目录&
wps 运行wps&
批处理文件的参数&
批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符&%&。&
%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。&
例2:C:根目录下有一批处理文件名为f.bat,内容为:&
@echo off&
format %1&
如果执行C:\&f a:&
那么在执行f.bat时,%1就表示a:,这样format %1就相当于format a:,于是上面的命令运行时实际执行的是format a:&
例3:C:根目录下一批处理文件名为t.bat,内容为:&
@echo off&
那么运行C:\&t a.txt b.txt&
%1 : 表示a.txt&
%2 : 表示b.txt&
于是上面的命令将顺序地显示a.txt和b.txt文件的内容。&
==== 注 ===============&
参数在批处理中也作为变量处理, 所以同样使用百分号作为引导符, 其后跟0-9中的一个数字构成参数引用符. 引用符和参数之间 (例如上文中的 %1 与 a: ) 的关系类似于变量指针与变量值的关系. 当我们要引用第十一个或更多个参数时, 就必须移动DOS 的参数起始指针. shift 命令正充当了这个移动指针的角色, 它将参数的起始指针移动到下一个参数, 类似C 语言中的指针操作. 图示如下:&
初始状态, cmd 为命令名, 可以用 %0 引用&
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10&
^ ^ ^ ^ ^ ^ ^ ^ ^ ^&
| | | | | | | | | |&
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9&
经过1次shift后, cmd 将无法被引用&
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10&
^ ^ ^ ^ ^ ^ ^ ^ ^ ^&
| | | | | | | | | |&
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9&
经过2次shift后, arg1也被废弃, %9指向为空, 没有引用意义&
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10&
^ ^ ^ ^ ^ ^ ^ ^ ^&
| | | | | | | | |&
%0 %1 %2 %3 %4 %5 %6 %7 %8&
遗憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 内核命令行环境下, shift 才支持 /n 参数, 可以以第一参数为基准返复移动起始指针.&
=================&
if goto choice for是批处理文件中比较高级的命令,如果这几个你用得很熟练,你就是批处理文件的专家啦。&
一、if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。 有三种格式:&
1、if [not] &参数& == &字符串& 待执行的命令&
参数如果等于(not表示不等,下同)指定的字符串,则条件成立,运行命令,否则运行下一句。&
例:if &%1&==&a& format a:&
if 的命令行帮助中关于此点的描述为:&
IF [NOT] string1==string2 command&
在此有以下几点需要注意:&
1. 包含字符串的双引号不是语法所必须的, 而只是习惯上使用的一种&防空&字符&
2. string1 未必是参数, 它也可以是环境变量, 循环变量以及其他字符串常量或变量&
3. command 不是语法所必须的, string2 后跟一个空格就可以构成一个有效的命令行&
=============================&
2、if [not] exist [路径\]文件名 待执行的命令&
如果有指定的文件,则条件成立,运行命令,否则运行下一句。&
如: if exist c:\config.sys type c:\config.sys&
表示如果存在c:\config.sys文件,则显示它的内容。&
****** 注 ********&
也可以使用以下的用法:&
if exist command&
device 是指DOS系统中已加载的设备, 在win98下通常有:&
AUX, PRN, CON, NUL&
COM1, COM2, COM3, COM4&
LPT1, LPT2, LPT3, LPT4&
XMSXXXX0, EMMXXXX0&
A: B: C: ...,&
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$&
具体的内容会因硬软件环境的不同而略有差异, 使用这些设备名称时, 需要保证以下三点:&
1. 该设备确实存在(由软件虚拟的设备除外)&
2. 该设备驱动程序已加载(aux, prn等标准设备由系统缺省定义)&
3. 该设备已准备好(主要是指a: b: ..., com1..., lpt1...等)&
可通过命令 mem/d | find &device& /i 来检阅你的系统中所加载的设备&
另外, 在DOS系统中, 设备也被认为是一种特殊的文件, 而文件也可以称作字符设备; 因为设备(device)与文件都是使用句柄(handle)来管理的, 句柄就是名字, 类似于文件名, 只不过句柄不是应用于磁盘管理, 而是应用于内存管理而已, 所谓设备加载也即指在内存中为其分配可引用的句柄.&
==================================&
3、if errorlevel &数字& 待执行的命令&
很多DOS程序在运行结束后会返回一个数字值用来表示程序运行的结果(或者状态),通过if errorlevel命令可以判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列)。如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。&
如if errorlevel 2 goto x2&
==== 注 ===========&
返回值从大到小的顺序排列不是必须的, 而只是执行命令为 goto 时的习惯用法, 当使用 set 作为执行命令时, 通常会从小到大顺序排列, 比如需将返回码置入环境变量, 就需使用以下的顺序形式:&
if errorlevel 1 set el=1&
if errorlevel 2 set el=2&
if errorlevel 3 set el=3&
if errorlevel 4 set el=4&
if errorlevel 5 set el=5&
当然, 也可以使用以下循环来替代, 原理是一致的:&
for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e&
更高效简洁的用法, 可以参考我写的另一篇关于获取 errorlevel 的文章&
出现此种现象的原因是, if errorlevel 比较返回码的判断条件并非等于, 而是大于等于. 由于 goto 的跳转特性, 由小到大排序会导致在较小的返回码处就跳出; 而由于 set命令的 &重复& 赋值特性, 由大到小排序会导致较小的返回码 &覆盖& 较大的返回码.
另外, 虽然 if errorlevel=&数字& command 也是有效的命令行, 但也只是
解释命令行时将 = 作为命令行切分符而忽略掉罢了&
===========================&
二、goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组。&
echo this is the end&
标号用&:字符串&来定义,标号所在行不被执行。&
==== willsort 编注&
label 常被译为 &标签& , 但是这并不具有广泛的约定性.&
goto 与 : 联用可实现执行中途的跳转, 再结合 if 可实现执行过程的条件分支, 多个 if 即可实现命令的分组, 类似 C 中 switch case 结构或者 Basic 中的 select case 结构, 大规模且结构化的命令分组即可实现高级语言中的函数功能. 以下是批处理和C/Basic在语法结构上的对照:&
Batch C / Basic&
goto&: goto&:&
goto&:&if if{}&else{} / if&elseif&endif&
goto&:&if... switch&case / select case&
goto&:&if&set&envar... function() / function(),sub()&
==================================&
三、choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后于if errorlevel配合,根据用户的选择运行不同的命令。&
注意:choice命令为DOS或者Windows系统提供的外部命令,不同版本的choice命令语法会稍有不同,请用choice /?查看用法。&
choice的命令语法(该语法为Windows 2003中choice命令的语法,其它版本的choice的命令语法与此大同小异):&
CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]&
该工具允许用户从选择列表选择一个项目并返回所选项目的索引。&
参数列表:&
/C choices 指定要创建的选项列表。默认列表是 &YN&。&
/N 在提示符中隐藏选项列表。提示前面的消息得到显示,&
选项依旧处于启用状态。&
/CS 允许选择分大小写的选项。在默认情况下,这个工具&
是不分大小写的。&
/T timeout 做出默认选择之前,暂停的秒数。可接受的值是从 0&
到 9999。如果指定了 0,就不会有暂停,默认选项&
会得到选择。&
/D choice 在 nnnn 秒之后指定默认选项。字符必须在用 /C 选&
项指定的一组选择中; 同时,必须用 /T 指定 nnnn。&
/M text 指定提示之前要显示的消息。如果没有指定,工具只&
显示提示。&
/? 显示帮助消息。&
ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选&
择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择,&
该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的&
ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0&
的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降&
CHOICE /?&
CHOICE /C YNC /M &确认请按 Y,否请按 N,或者取消请按 C。&&
CHOICE /T 10 /C ync /CS /D y&
CHOICE /C ab /M &选项 1 请选择 a,选项 2 请选择 b。&&
CHOICE /C ab /N /M &选项 1 请选择 a,选项 2 请选择 b。&&
==== willsort 编注 ===============================&
我列出win98下choice的用法帮助, 已资区分&
Waits for the user to choose one of a set of choices.&
等待用户选择一组待选字符中的一个&
CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]&
/C[:]choices Specifies allowable keys. Default is YN&
指定允许的按键(待选字符), 默认为YN&
/N Do not display choices and ? at end of prompt string.&
不显示提示字符串中的问号和待选字符&
/S Treat choice keys as case sensitive.&
处理待选字符时大小写敏感&
/T[:]c,nn Default choice to c after nn seconds&
在 nn 秒后默认选择 c&
text Prompt string to display&
要显示的提示字符串&
ERRORLEVEL is set to offset of key user presses in choices.&
ERRORLEVEL 被设置为用户键入的字符在待选字符中的偏移值&
如果我运行命令:CHOICE /C YNC /M &确认请按 Y,否请按 N,或者取消请按 C。&&
屏幕上会显示:&
确认请按 Y,否请按 N,或者取消请按 C。 [Y,N,C]?&
例:test.bat的内容如下(注意,用if errorlevel判断返回值时,要按返回值从高到低排列):&
@echo off&
choice /C dme /M &defrag,mem,end&&
if errorlevel 3 goto end&
if errorlevel 2 goto mem&
if errorlevel 1 goto defrag&
c:\dos\defrag&
echo good bye&
此批处理运行后,将显示&defrag,mem,end[D,M,E]?& ,用户可选择d m e ,然后if语句根据用户的选择作出判断,d表示执行标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后都以goto end将程序跳到end标号处,然后程序将显示good bye,批处理运行结束。&
四、for 循环命令,只要条件符合,它将多次执行同一命令。&
对一组文件中的每一个文件执行某个特定命令。&
FOR %%variable IN (set) DO command [command-parameters]&
%%variable 指定一个单一字母可替换的参数。&
(set) 指定一个或一组文件。可以使用通配符。&
command 指定对每个文件执行的命令。&
command-parameters&
为特定命令指定参数或命令行开关。&
例如一个批处理文件中有一行:&
for %%c in (*.bat *.txt) do type %%c&
则该命令行会显示当前目录下所有以bat和txt为扩展名的文件的内容。&
==== willsort 编注 =====================================================&
需要指出的是, 当()中的字符串并非单个或多个文件名时, 它将单纯被当作字符串替换, 这个特性再加上()中可以嵌入多个字符串的特性, 很明显 for 可以被看作一种遍历型循环.&
当然, 在 nt/2000/xp/2003 系列的命令行环境中, for 被赋予了更多的特性, 使之可以分析命令输出或者文件中的字符串, 也有很多开关被用于扩展了文件替换功能.&
========================================================================&
批处理示例&
1. IF-EXIST&
1) 首先用记事本在C:\建立一个test1.bat批处理文件,文件内容如下:&
@echo off&
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT&
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist&
然后运行它:&
C:\&TEST1.BAT&
如果C:\存在AUTOEXEC.BAT文件,那么它的内容就会被显示出来,如果不存在,批处理就会提示你该文件不存在。&
2) 接着再建立一个test2.bat文件,内容如下:&
@ECHO OFF&
IF EXIST \%1 TYPE \%1&
IF NOT EXIST \%1 ECHO \%1 does not exist&
C:\&TEST2 AUTOEXEC.BAT&
该命令运行结果同上。&
(1) IF EXIST 是用来测试文件是否存在的,格式为&
IF EXIST [路径+文件名] 命令&
(2) test2.bat文件中的%1是参数,DOS允许传递9个批参数信息给批处理文件,分别为%1~%9(%0表示test2命令本身) ,这有点象编程中的实参和形参的关系,%1是形参,AUTOEXEC.BAT是实参。&
==== willsort 编注 =====================================================&
DOS没有 &允许传递9个批参数信息& 的限制, 参数的个数只会受到命令行长度和所调用命令处理能力的限制. 但是, 我们在批处理程序中, 在同一时刻只能同时引用10个参数, 因为 DOS只给出了 %0~%9这十个参数引用符.&
========================================================================&
3) 更进一步的,建立一个名为TEST3.BAT的文件,内容如下:&
@echo off&
IF &%1& == &A& ECHO XIAO&
IF &%2& == &B& ECHO TIAN&
IF &%3& == &C& ECHO XIN&
如果运行:&
C:\&TEST3 A B C&
屏幕上会显示:&
如果运行:&
C:\&TEST3 A B&
屏幕上会显示&
在这个命令执行过程中,DOS会将一个空字符串指定给参数%3。&
2、IF-ERRORLEVEL&
建立TEST4.BAT,内容如下:&
@ECHO OFF&
XCOPY C:\AUTOEXEC.BAT D:\&
IF ERRORLEVEL 1 ECHO 文件拷贝失败&
IF ERRORLEVEL 0 ECHO 成功拷贝文件&
然后执行文件:&
C:\&TEST4&
如果文件拷贝成功,屏幕就会显示&成功拷贝文件&,否则就会显示&文件拷贝失败&。&
IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。&
因此下面的批处理文件是错误的:&
@ECHO OFF&
XCOPY C:\AUTOEXEC.BAT D:\&
IF ERRORLEVEL 0 ECHO 成功拷贝文件&
IF ERRORLEVEL 1 ECHO 未找到拷贝文件&
IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作&
IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作&
IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误&
无论拷贝是否成功,后面的:&
未找到拷贝文件&
用户通过ctrl-c中止拷贝操作&
预置错误阻止文件拷贝操作&
拷贝过程中写盘错误&
都将显示出来。&
以下就是几个常用命令的返回值及其代表的意义:&
0 备份成功&
1 未找到备份文件&
2 文件共享冲突阻止备份完成&
3 用户用ctrl-c中止备份&
4 由于致命的错误使备份操作中止&
0 盘比较相同&
1 盘比较不同&
2 用户通过ctrl-c中止比较操作&
3 由于致命的错误使比较操作中止&
4 预置错误中止比较&
0 盘拷贝操作成功&
1 非致命盘读/写错&
2 用户通过ctrl-c结束拷贝操作&
3 因致命的处理错误使盘拷贝中止&
4 预置错误阻止拷贝操作&
0 格式化成功&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:408477次
积分:5124
积分:5124
排名:第3853名
原创:139篇
转载:242篇
(6)(15)(12)(7)(22)(7)(6)(3)(1)(5)(3)(9)(14)(3)(11)(15)(2)(1)(4)(2)(1)(3)(4)(2)(1)(3)(6)(4)(4)(3)(9)(16)(1)(5)(3)(2)(1)(10)(18)(22)(7)(23)(15)(8)(35)(19)(7)53950人阅读
windows系统(27)
终极dos批处理循环命令详解
格式:FOR [参数] %%变量名 IN (相关文件或命令)&& DO 执行的命令
  作用:对一个或一组文件,字符串或命令结果中的每一个对象执行特定命令,达到我们想要的结果。
  注意:在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable,而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.
  关于:for命令可以带参数或不带参数,带参数时支持以下参数:/d /l /r /f
  下面分别解释一下
  零:无参数时:
  FOR %variable IN (set) DO command [command-parameters]
  %variable 指定一个单一字母可替换的参数。
  (set)&&&&& 指定一个或一组文件。可以使用通配符。
  command&&& 指定对每个文件执行的命令。
  command-parameters
  为特定命令指定参数或命令行开关。
  TTT示例:
  for %%i in (t*.*) do echo %%i --显示当前目录下与t*.*相匹配的文件(只显示文件名,不显示路径)&
  for %%i in (d:\mydocuments\*.doc) do @echo %%i --显示d:\mydocuments\目录下与*.doc相匹配的文件
  一、参数 /d (参数只能显示当前目录下的目录名字)
  格式:FOR /D %variable IN (set) DO command [command-parameters]
  这个参数主要用于目录搜索,不会搜索文件,/D 参数只能显示当前目录下的目录名字。(TTT特别说明:只会搜索指定目录下的目录,不会搜索再下一级的目录。)
  TTT示例:
  for /d %%i in (c:\*) do echo %%i --显示c盘根目录下的所有目录
  for /d %%i in (???) do echo %%i --显示当前目录下名字只有1-3个字母的目录
  二、参数 /R (搜索指定路径及所有子目录中与set相符合的所有文件)
  格式:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
  此命令会搜索指定路径及所有子目录中与set相符合的所有文件,注意是指定路径及所有子目录。
  1、set中的文件名如果含有通配符(?或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。
  2、如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录)(并在后面加上具体的文件名),而不管set中的指定文件是否存在。
  例:for /r c:\ %%i in (*.exe) do echo %%i --把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了!!!!
  TTT示例:
  for /r c:\ %%i in (boot.ini) do echo %%i --枚举了c盘所有目录
  for /r d:\backup %%i in (1) do echo %%i --枚举d\backup目录
  for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i --很好的搜索命令,列举boot.ini存在的目录
  三、参数 /L (该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step)
  格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]
  该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step
  TTT示例:
  for /l %%i in (1,1,5) do @echo %%i --输出1 2 3 4 5
  for /l %%i in (1,2,10) do @echo %%i --输出1,3,5,7,9&
  for /l %%i in (100,-20,1) do @echo %%i --输出100,80,60,40,20
  for /l %%i in (1,1,5) do start cmd --打开5个CMD窗口
  for /l %%i in (1,1,5) do md %%i --建立从1~5共5个文件夹
  for /l %%i in (1,1,5) do rd /q %%i --删除从1~5共5个文件夹
四、参数 /F (使用文件解析来处理命令输出、字符串及文件内容。)
  这个参数是最难的,参数又多,先简单的解释一下:for命令带这个参数可以分析文件内容,字符串内容或某一命令输出的结果,并通过设置option得我们想要的结果。
  以下是某高手的解释,感觉有点太专业了,自认为不太容易理解,也列一下:
  [迭代及文件解析--使用文件解析来处理命令输出、字符串及文件内容。使用迭代变量定义要检查的内容或字符串,并使用各种options选项进一步修改解析方式。使用options令牌选项指定哪些令牌应该作为迭代变量传递。
  请注意:在没有使用令牌选项时,/F 将只检查第一个令牌。文件解析过程包括读取输出、字符串或文件内容,将其分成独立的文本行以及再将每行解析成零个或更多个令牌。然后通过设置为令牌的迭代变量值,调用 for 循环。
  默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。跳过空行。]
  +++
  格式:
  FOR /F [&options&] %variable IN (file-set) DO command [command-parameters]
  FOR /F [&options&] %variable IN (&string&) DO command [command-parameters]
  FOR /F [&options&] %variable IN ('command') DO command [command-parameters]
  或者,如果有 usebackq 选项:
  FOR /F [&options&] %variable IN (file-set) DO command [command-parameters]
  FOR /F [&options&] %variable IN (&string&) DO command [command-parameters]
  FOR /F [&options&] %variable IN ('command') DO command [command-parameters]
  TTT说明:以上是WinXP系统中的帮助内容,你可以注意到,两者完全相同,这其实是系统的错误,第二段“如果有 usebackq 选项:”应该以下的内容:
  FOR /F [&options&] %variable IN (&file-set&) DO command [command-parameters]
  FOR /F [&options&] %variable IN ('string') DO command [command-parameters]
  FOR /F [&options&] %variable IN (`command`) DO command [command-parameters] --(`command`中的引号为反引号,是键盘上数字1左面的那个键)
  +++
  (TTT说明:下面是详细的解释,大部分是系统中的帮助内容,也有些错误(怪不得for命令这么难学),已经被我纠正了。)
1) OPTION关键字详解:
  eol=c:指一个行注释字符的结尾(就一个)。例如:eol=; --忽略以分号打头的那些行;
  skip=n:指在文件开始时忽略的行数。例如:skip=2 --忽略2行;
  delims=xxx:指分隔符集。这个替换了空格和跳格键的默认分隔符集。例如:[delims=, ] --指定用逗号,空格对字符串进行分隔。
  tokens=x,y,m-n:指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符是星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。例如:tokens=2,3* --将每行中的第二个和第三个符号传递给 for 程序体;tokens=2,3* ... i% --将会把取到的第二个字符串赋给i%,第三个赋给j%,剩下的赋给k%。
  关于usebackq,不同版本的系统提示不同的帮助,不过都有助于理解,所以都摘抄如下:
  (1),usebackq:使用后引号(键盘上数字1左面的那个键`)。未使用参数usebackq时:file-set表示文件,不能加引号,所以 不能含有空格;加双引号表示字符串,即&string&;加单引号表示执行命令,即'command'。使用参数usebackq时:file-set 和&file-set&都表示文件,当文件路径或名称中有空格时,就可以用双引号括起来;单引号表示字符串,即'string';后引号表示命令执行,即 `command`。(此段是WinXP系统中的帮助)
  (2),usebackq:指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串;并且一个单引号字符为文字字符串命令;并允许在filenameset中使用双引号扩起文件名称。
  以上两条结合着看,其实已经可以明白了,我再说明一下:
  其实这个参数的目的就是为了处理带有空格的文件名。如果您要处理的文件名和路径中含有空格,如果直接使用,会提示找不到文件。如果你用双引号将文件名 和路径括起来。这时候将作为字符串处理,而不是作为文件了。为了应对这种情况,所以才增加了这个“usebackq”参数。如果使用了这个参数,对于括号 中的加双引号的集合,系统就可以认为是文件了;真正的字符串要加单引号;命令要加反引号。
  2) file-set 为一个或多个文件名。继续到 file-set 中的下一个文件之前,每份文件都已被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符 号字符串变量值调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。您可通过指定可选 &options&参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同解析选项的关键字。
  3) %i:专门在 for 语句中得到说明,%j 和 %k 是通过tokens= 选项专门得到说明的。您可以通过 tokens= 一行指定最多 26 个符号,只要不试图说明一个高于字母 'z' 或'Z' 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;而且,同时不能有 52 个以上都在使用中。
  (TTT补充说明:
  一般在tokens后只指定第一个参数,如%%i或%%a,在后面使用第二个及两个以上的参数,自动按顺序往下排即可。如前面指定的是%%a,后面则 用%%b代表第二个结果,%%c代表第 三个结果。。。测试了一下tokens后指定多个变量名,没有测试成功,应该是不可以的。所以token后只能跟要使用的第一个变量名
  如果使用的变量名超过了%z或%Z,就无法使用了,曾经以为会循环过来:如%%z后可以使用%%a或%%A,但经测试,这是不可以的。
  如:for /f &tokens=1,2,3* delims=-, & %%y in (&aa bb,cc-dd ee&) do echo %%y %%z %%A %%a --只会输出前两个字符串,后面的两个变量是无效的。)
  +++
  以下是系统提供的范例:
  FOR /F &eol=; tokens=2,3* delims=, & %i in (myfile.txt) do @echo %i %j %k --
  说明:会分析 myfile.txt 中的每一行,
  eol=; --忽略以分号打头的那些行;
  tokens=2,3* --将每行中的第二个和第三个符号传递给 for 程序体;
  delims= , --用逗号和/或空格定界符号。
  %i --这个 for 程序体的语句引用 %i 来取得取得的首个字符串(本例中为第二个符号),引用 %j 来取得第二个字符串(本例中为第三个符号)引用 %k来取得第三个符号后的所有剩余符号。
  (TTT说明:上述例子和说明中明显的错误,%i应该换为%%i(帮助中有明确的说明:指定变量请使用 %%variable,而不要用 %variable,误导)
  +++
  TTT:下面列我做的几个例子:
  1,分析文件的例子
  FOR /F &eol=; tokens=1,2* delims=,- & %%i in (d:\test.txt) do echo %%i %%j %%k
  2,分析字符串的例子:
  for /f &tokens=1,2,3* delims=-, & %%i in (&aa bb,cc-dd ee&) do echo %%i %%j %%k %%l
  3,分析命令输出的例子:
  FOR /F &tokens=1* delims==& %%i IN ('set') DO @echo [%%i----%%j]
  如果使用了usebackq参数后,命令如下,结果与上面的完全相同。
  1,分析文件的例子
  FOR /F &usebackq eol=; tokens=1,2* delims=,- & %%i in (&d:\test.txt&) do echo %%i %%j %%k
  2,分析字符串的例子:
  for /f &usebackq tokens=1,2,3* delims=-, & %%i in ('aa bb,cc-dd ee') do echo %%i %%j %%k %%l
  3,分析命令输出的例子:(会枚举当前环境中的环境变量名称和值。)
  FOR /F &usebackq tokens=1* delims==& %%i IN (`set`) DO @echo [%%i----%%j]
  结果大家可以试一下,很容易就明白的。
  FOR命令中的变量&
  FOR 变量参照的替换已被增强。您现在可以使用下列选项语法:
  ~I&&&&&&&& - 删除任何引号(&),扩充 %I
  %~fI&&&&&&& - 将 %I 扩充到一个完全合格的路径名
  %~dI&&&&&&& - 仅将 %I 扩充到一个驱动器号
  %~pI&&&&&&& - 仅将 %I 扩充到一个路径
  %~nI&&&&&&& - 仅将 %I 扩充到一个文件名
  %~xI&&&&&&& - 仅将 %I 扩充到一个文件扩展名
  %~sI&&&&&&& - 扩充的路径只含有短名
  %~aI&&&&&&& - 将 %I 扩充到文件的文件属性
  %~tI&&&&&&& - 将 %I 扩充到文件的日期/时间
  %~zI&&&&&&& - 将 %I 扩充到文件的大小
  %~$PATH:I&& - 查找列在路径环境变量的目录(TTT提示:是环境变量path的目录),并将 %I 扩充到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串
  此外,还可以组合修饰符来得到多重结果:
  %~dpI&&&&&& - 仅将 %I 扩充到一个驱动器号和路径
  %~nxI&&&&&& - 仅将 %I 扩充到一个文件名和扩展名
  %~fsI&&&&&& - 仅将 %I 扩充到一个带有短名的完整路径名
  %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个驱动器号和路径。&
  %~ftzaI&&&& - 将 %I 扩充到类似输出线路的 DIR
  在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名比较易读,而且避免与不分大小写的组合键混淆。
  (以上是系统帮助的内容)
  我们可以看到每行都有一个大写字母&I&,这个I其实就是我们在FOR带入的变量,例如:
  FOR /F &usebackq eol=; tokens=1,2* delims=,- & %%x in (&d:\test.txt&) do echo %%x %%y %%z
  这里我们就要把那个x,y,z改成%~fx,%~fy,%~fz。
  +++
  TTT特例:以下是我根据以上说明作的一个综合的例子,可以直接复制到记事本里,保存为bat格式(c盘下任一目录),运行后,可以直观的看到扩展后的效果。
  @echo off
  echo ---显示&dir c:\boot.ini /b /ah&
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 不扩展变量 %%i
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~fI %%~fi --扩充到一个完全合格的路径名
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~dI %%~di --仅将变量扩充到一个驱动器号
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~pI %%~pi --仅将变量扩充到一个路径
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~nI %%~ni --仅将变量扩充到一个文件名
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~xI %%~xi --仅将变量扩充到一个文件扩展名
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~sI %%~si --扩充的路径只含有短名
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~aI %%~ai --将变量扩充到文件的文件属性
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~tI %%~ti --将变量扩充到文件的日期/时间
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~zI %%~zi --将变量扩充到文件的大小
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~$PATH:I %%~$PATH:i --查找列在路径环境变量的目录,并将变量扩充到找到的第一个完全合格的名称
  echo ---以下显示组合修饰符来得到多重结果---:
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~dpI %%~dpi --仅将变量扩充到一个驱动器号和路径
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~nxI %%~nxi --仅将变量扩充到一个文件名和扩展名
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~fsI %%~fsI --仅将变量扩充到一个带有短名的完整路径名
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~dp$PATH:I %%~dp$PATH:i --查找列在路径环境变量的目录,并将变量扩充到找到的第一个驱动器号和路径
  for /f &delims==& %%i in ('dir c:\boot.ini /b /ah') do echo 扩展变量到~ftzaI %%~ftzai --将变量扩充到类似输出线路的DIR
  echo ---显示&dir C:\WINDOWS\system32\notepad.exe /b&
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 不扩展变量 %%i
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~fI %%~fi --扩充到一个完全合格的路径名
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~dI %%~di --仅将变量扩充到一个驱动器号
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~pI %%~pi --仅将变量扩充到一个路径
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~nI %%~ni --仅将变量扩充到一个文件名
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~xI %%~xi --仅将变量扩充到一个文件扩展名
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~sI %%~si --扩充的路径只含有短名
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~aI %%~ai --将变量扩充到文件的文件属性
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~tI %%~ti --将变量扩充到文件的日期/时间
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~zI %%~zi --将变量扩充到文件的大小
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~$PATH:I %%~$PATH:i --查找列在路径环境变量的目录,并将变量扩充到找到的第一个完全合格的名称
  echo ---以下显示组合修饰符来得到多重结果---:
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~dpI %%~dpi --仅将变量扩充到一个驱动器号和路径
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~nxI %%~nxi --仅将变量扩充到一个文件名和扩展名
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~fsI %%~fsI --仅将变量扩充到一个带有短名的完整路径名
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~dp$PATH:I %%~dp$PATH:i --查找列在路径环境变量的目录,并将变量扩充到找到的第一个驱动器号和路径
  for /f &delims==& %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 扩展变量到~ftzaI %%~ftzai --将变量扩充到类似输出线路的DIR
  TTT说明:
  1,以上命令中,%%~fsI无法显示,估计是系统错误,因为%%~fI是扩充到一个完全合格的路径名,%%~sI只含有短文件名,本身是相互矛盾的,所以出错。不知是系统的错误还是在考我们~~
  2,以上命令如果保存在别的盘中,无法显示正确的驱动器和路径。
  3,如果想要%%~dp$PATH:i正常显示,要保证环境变量path中确实有这个路径:C:\WINDOWS\system32。
 下面依次说明一下:
  +++
  一、 ~I&&&&&& - 删除任何引号(&),扩展 %I
  这个变量的作用就如他的说明,删除引号!
  删除引号规则如下(BAT兄补充!):
  1、若字符串首尾同时存在引号,则删除首尾的引号;
  2、若字符串尾不存在引号,则删除字符串首的引号;
  3、如果字符串中间存在引号,或者只在尾部存在引号,则不删除。
  龙卷风补充:无头不删,有头连尾删。
  我们来看这个例子,首先建立临时文件temp.txt,内容如下
  &2222&
  &4444&44
  &55&55&55
  也可建立个BAT文件代码如下:
  @echo off
  echo ^&1111&temp.txt
  echo &2222&&&temp.txt
  echo 3333^&&&temp.txt
  echo &4444&44&&temp.txt
  echo ^&55&55&55&&temp.txt
  rem 上面建立临时文件,注意不成对的引号要加转义字符^,重定向符号前不要留空格
  FOR /F &delims=& %%i IN (temp.txt) DO echo&& %%~i
  del temp.txt
  执行后,我们看CMD的回显如下:
  1111&&&&&&&&&& #字符串前的引号被删除了
  2222&&&&&&&&&& #字符串首尾的引号都被删除了
  3333&&&&&&& #字符串前无引号,后面的引号保留
  4444&44&&&&&&& #字符串前面的引号删除了,而中间的引号保留
  55&55&55&&& #字符串前面的引号删除了,而中间的引号保留
  请按任意键继续. . .
  结果和之前temp.txt中的内容对比一下,我们会发现第1、2、5行的引号都消失了,这就是删除引号~i的作用了!
  +++
  二、 %~fI&&&&&&& - 将 %I 扩展到一个完全合格的路径名
  把代码保存放在随便哪个地方,我这里就放桌面吧.
  FOR /F &delims==& %%i IN ('dir /b') DO @echo&& %%~fi
  执行后显示内容如下
  C:\Documents and Settings\Administrator\桌面\test.bat
  C:\Documents and Settings\Administrator\桌面\test.vbs
  当我把代码中的 %%~fi直接改成%%i
  FOR /F &delims==& %%i IN ('dir /b') DO @echo&& %%i
  执行后就会显示以下内容:
  test.bat
  test.vbs
  通过对比,我们很容易就看出没有路径了,这就是&将 %I 扩展到一个完全合格的路径名&的作用,也就是如果%i变量的内容是一个文件名的话,他就会把这个文件所在的绝对路径打印出来,而不只单单打印一个文件名,自己动手动实验下就知道了!
  +++
  三、 %~dI&&&&&&& - 仅将 %I 扩展到一个驱动器号
  看例子:
  代码如下,我还是放到桌面执行!
  FOR /F &delims==& %%i IN ('dir /b') DO @echo&& %%~di
  执行后我CMD里显示如下
  我桌面就两个文件test.bat,test.vbs,%%~di作用是,如果变量%%i的内容是一个文件或者目录名,他就会把他这文件或者目录所在的盘符号打印出来!
  +++
  四、 %~pI&&&&&&& - 仅将 %I 扩展到一个路径
  这个用法和上面一样,他只打印路径不打印文件名字
  FOR /F &delims==& %%i IN ('dir /b') DO @echo&& %%~pi
  我就不打结果了,大家自己复制代码看结果吧,下面几个都是这么个用法,代码给出来,大家自己看结果吧!
  +++
  五、 %~nI&&&&&&& - 仅将 %I 扩展到一个文件名
  只打印文件名字
  FOR /F &delims==& %%i IN ('dir /b') DO @echo&& %%~ni
  +++
  六、 %~xI&&&&&&& - 仅将 %I 扩展到一个文件扩展名
  只打印文件的扩展名
  FOR /F &delims==& %%i IN ('dir /b') DO @echo&& %%~xi
  +++
  七、 %~sI&&&&&&& - 扩展的路径只含有短名
  打印绝对短文件名
  FOR /F &delims==& %%i IN ('dir /b') DO @echo&& %%~si
  +++
  八、 %~aI&&&&&&& - 将 %I 扩展到文件的文件属性
  打印文件的属性
  FOR /F &delims==& %%i IN ('dir /b') DO @echo&& %%~ai
  +++
  九、 %~tI&&&&&&& - 将 %I 扩展到文件的日期/时间
  打印文件建立的日期
  FOR /F &delims==& %%i IN ('dir /b') DO @echo&& %%~ti
  +++
  十、 %~zI&&&&&&& - 将 %I 扩展到文件的大小
  打印文件的大小
  FOR /F &delims==& %%i IN ('dir /b') DO @echo&& %%~zi
  龙卷风补充:上面例子中的&delims==&可以改为&delims=&,即不要分隔符
  +++
  十一、 %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩展到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩展到空字符串
  这是最后一个,和上面那些都不一样,我单独说说!
  然后在把这些代码保存为批处理,放在桌面。
  @echo off
  FOR /F &delims=& %%i IN (“notepad.exe”) DO echo&& %%~$PATH:i
  龙卷风补充:上面代码显示结果为C:\WINDOWS\system32\notepad.exe
  他的意思就在PATH变量里指定的路径里搜索notepad.exe文件,如果有notepad.exe则会把他所在绝对路径打印出来,没有就打印一个错误!
  (TTT说明,保存到桌面上,运行显示结果为:系统找不到文件 “notepad.exe”。查看环境变量path中确实有这个路径,不明原因!后来发现了,原来是中文引号的原因。
  上面的命令应该写成:
  FOR /F &delims=& %%i IN (&notepad.exe&) DO echo&& %%~$PATH:i&
   最后发一个用批处理做一五子棋游戏:
@echo off&setlocal enabledelayedexpansion
mode con: lines=43 cols=110
set li39=&&& A B C D E F G H I J K L M N O P Q R S
set li0= ┌─────────────────────────────────────┐
set li1=A│┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐│A
for %%a in (!li39:~5^,-1!) do (set/a var+=2&set li!var!=%%a│├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤│%%a)
for /l %%a in (2,2,36) do (set li%%a= ││ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││)
set li37=S│└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘│S
set li38= └─────────────────────────────────────┘
set str=a b c d e f g h i j k l m n o p q r s
for %%a in (%str%) do (set/a .+=1,%%a=.&set z!.!=%%a)
set li5=!li5!&& 五 棋 子 人 机 对 战
set li7=!li7!&&&&&&& 批 处 理
set li10=!li10!&&&&& 电 脑 水 平 中 等
set li31=!li31! 由 netbenton 编写完成
set li33=!li33! 棋盘设计参照了 batman
title&& 批处理五子棋
set str=###################
for /l %%a in (1,1,19) do (
&&&&&&& set he%%a=!str!&set sh%%a=!str!
&&&&&&& for /l %%b in (1,1,19) do set [%%a.%%b=0
for /l %%a in (5,1,19) do (
&&&&&&& set pi%%a=!str:~,%%a!&set ni%%a=!str:~,%%a!
&&&&&&& set pi!.!=!str:~,%%a!&set ni!.!=!str:~,%%a!
&&&&&&& set/a .-=1
set ●=○&set ○=●
set zhi=●
set say=say
::设置电脑IQ
set&&&@#@@@.4 @@@#@.2 @@#@@.3 vs0 $$$$#.1 #$$$$.5 $$#$$.3 $#$$$.4 $$$#$.2 vs1&&&&vs2&&&&@#@@#.4-1&&vs3
set idea=!idea!&&@@@##.2-W-1 @##@@#.4-5&&&@#@#@#.3-5 vs4 #$$#$#.3-W-6-1 #$#$$#.4-W-1-6 ##$$$#.5-W-1-6
#$$$##.2-W-1-6 vs5&&&##$$$.W-4-5 $$$##.W-2-1 $$##$.W-2-3 $##$$.W-3-4 $#$$#.W-4-1 $#$#$.W-4-2 #$$#$.W-2-5 ##$$#.W-4-W-1-5 #$$##.W-2-W-1-5 #$#$#.W-3-W-1-5
#$##$#.W-3-4
set idea=!idea! vs7 #$$$#.1-5 @@###.4-3&&&vs8 ###$###.3-5 vs9 @####.4&&#$###.3 ###$#.3
set idea=!idea!&&&$####.3 ####$.3 $$###.3 ###$$.3 $#$##.2 ##$#$.4 #$##$.3 $##$#.3 $###$.3 vs10
setlocal enabledelayedexpansion
for /l %%a in (0,1,39) do (echo&&& !li%%a!)
set li39=!li39!&& reboot重新开始,exit退出。
set li37=!li37!&&&&&& back 悔棋
set /p var=选择谁先下[ W,玩家 D,电脑 Q,退出 ]:
if /i &!var!& equ &Q& goto :quit
if /i &!var!& equ &D& (set onez=○&set towz=●&set hou=☆) else (set onez=●&set towz=○&set hou=★)
set a!onez!=电脑&set a!towz!=玩家
set ttr=!idea=%onez%!&set ttr=!ttr=%towz%!
for %%a in (!ttr!) do (
&&&&&&& for /f &tokens=1,2 delims=.& %%b in (&%%a&) do (set %%b=%%c&set idea=!idea! %%b)
set li27=!li27!&&& !onez! !a%onez%!
set li25=!li25!&&& !towz! !a%towz%!
set/a pos=10,poh=10&goto :getok
(if %zhi% equ %onez% goto :men
setlocal enabledelayedexpansion
for %%a in (!idea!) do (
&&&&&&& set str=%%a
&&&&&&& if &!str:~,2!& neq &vs& (
&&&&&&& for %%b in (he sh) do (
&&&&&&&&&&&&&&& set all=!%%b1!!%%b2!!%%b3!!%%b4!!%%b5!!%%b6!!%%b7!!%%b8!!%%b9!!%%b10!!%%b11!!%%b12!!%%b13!!%%b14!!%%b15!!%%b16!!%%b17!!%%b18!!%%b19!
&&&&&&&&&&&&&&& if &!all:%%a=!& neq &!all!& (
&&&&&&&&&&&&&&&&&&&&&&& for /l %%c in (1,1,19) do (
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if &!%%b%%c:%%a=!& neq &!%%b%%c!& set/a .+=1&set put!.!=%%b %%c.%%a.!iqam!
&&&&&&&&&&&&&&&&&&&&&&& )
&&&&&&& )&&&&&&& )
&&&&&&& for %%b in (pi ni) do (
&&&&&&&&&&&&&&& set all=!%%b5!!%%b6!!%%b7!!%%b8!!%%b9!!%%b10!!%%b11!!%%b12!!%%b13!!%%b14!!%%b15!!%%b16!!%%b17!!%%b18!!%%b19!!%%b20!!%%b21!!%%b22!!%%b23!!%%b24!!%%b25!!%%b26!!%%b27!!%%b28!!%%b29!!%%b30!!%%b31!!%%b32!!%%b33!
&&&&&&&&&&&&&&& if &!all:%%a=!& neq &!all!& (
&&&&&&&&&&&&&&&&&&&&&&& for /l %%c in (5,1,33) do (
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if &!%%b%%c:%%a=!& neq &!%%b%%c!& set/a .+=1&set put!.!=%%b %%c.%%a.!iqam!
&&&&&&&&&&&&&&&&&&&&&&& )
&&&&&&& )&&&&&&& )
&&&&&&& ) else (
&&&&&&&&&&&&&&& set/a &iqam=(iqam+1)/8&
&&&&&&&&&&&&&&& if %%a equ vs8 if defined . goto :get
&&&&&&&&&&&&&&& if %%a equ vs9 if defined . goto :get
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
if defined . (goto :get)
echo. 已经和棋了&
endlocal&goto :restart
set/a .=lips-1&for /f &tokens=1-3& %%b in (&li!liph! !lips! !.!&) do (set %%b=!%%b:~0,%%d!%hou%!%%b:~%%c!)
set li38=!li38![%悔:~,24%]
for /l %%a in (0,1,39) do (echo&&& !li%%a!)
for /f &tokens=1-3& %%b in (&li!liph! !lips! !.!&) do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)
set li38=%li38%
set /p user=!say:say=%error%! [列前,行后]:&
if &!user!& equ &reboot& endlocal&goto :restart
if &!user!& equ &exit& goto :quit
if &!user!& equ &back& call :悔&goto :men
set/a pos=!user:~0,1!,poh=!user:~1,2!,var=pos-1 2&nul
if not defined [!poh!.!pos! set error=输入点不存在 &goto :men
if &!he%poh%:~%var%,1!& neq &#& set error=该点已经有子 &goto men
goto :getok
::取最佳的走法
for /l %%z in (!.!,-1,1) do (
for /f &tokens=1,2,3 delims=.& %%1 in (&!put%%z!&) do (
for /f &tokens=1-4& %%a in (&%%1 %%2&) do (
&&&&&&& set iqm=%%3
&&&&&&& set vara=!%%a%%b:*%%c=!srqponmlkjihgfedcba0
&&&&&&& for %%4 in (!%%2:-^=;!) do (
&&&&&&&&& if &%%4& equ &W& (set/a iqm=iqm/5*3) else (
&&&&&&&&&&&&&&& set/a var=!vara:~19,1!+%%4
&&&&&&&&&&&&&&& if &%%a& equ &he& (set/a poh=%%b,pos=20-var)
&&&&&&&&&&&&&&& if &%%a& equ &sh& (set/a poh=20-var,pos=%%b)
&&&&&&&&&&&&&&& if %%b lss 19 (set/a var=%%b-var+1) else (set/a var=38-%%b-var+1)
&&&&&&&&&&&&&&& if &%%a& equ &pi& (if %%b lss 19 (set/a pos=var,poh=%%b-var+1) else (set/a poh=20-var,pos=%%b-19+var))
&&&&&&&&&&&&&&& if &%%a& equ &ni& (if %%b lss 19 (set/a pos=var,poh=19-%%b+var) else (set/a poh=var,pos=%%b-19+var))
&&&&&&&&&&&&&&& if not defined R!pos!R!poh!R set /a `+=1&set ram!`!=R!pos!R!poh!R
&&&&&&&&&&&&&&& set/a R!pos!R!poh!R+=iqm
&&&&&&&&& )
for /l %%a in (1,1,!`!) do (
&&&&&&& for %%b in (!ram%%a!) do (
&&&&&&&&&&&&&&& for %%c in (!%%b!) do (
&&&&&&&&&&&&&&&&&&&&&&& if %%c gtr !rmk! set/a rmk=%%c,.=0
&&&&&&&&&&&&&&&&&&&&&&& if %%c equ !rmk! set rmz!.!=%%b&set/a .+=1
&&&&&&&&&&&&&&& )
)&&&&&&& )
set/a .=!random!%%.
for /f &tokens=1,2 delims=R& %%a in (&!rmz%.%!&) do (set/a pos=%%a,poh=%%b)
rem start set r^&echo !.!^&pause^&exit
endlocal&set/a pos=%pos%,poh=%poh%
set say=say !z%pos%!!z%poh%!(%poh%)&set error=电脑最后下在:
set zhi=!%zhi%!&set win=!zhi!!zhi!!zhi!!zhi!!zhi!
(set/a piph=poh+pos-1,lips=pos*2+1,niph=19+pos-poh,liph=poh*2-1
if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)
if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)
for %%a in (&li!liph! !lips!& &he!poh! !pos!& &sh!pos! !poh!& &pi!piph! !pips!& &ni!niph! !nips!&) do (
&&&&&&& for /f &tokens=1,2& %%b in (%%a) do (
&&&&&&&&&&&&&&& set/a .=%%c-1
&&&&&&&&&&&&&&& for %%d in (!.!) do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)
&&&&&&&&&&&&&&& if &!%%b:%win%=!& neq &!%%b!& set win=y
(set/a asc%zhi%+=1
set 悔= !z%pos%!!z%poh%!!悔!
if !win! neq y goto :loop)
for /l %%a in (0,1,39) do (echo&&& !li%%a!)
set/p= && !a%zhi%! %zhi%子 第!asc%zhi%!手 !z%pos%!!z%poh%!(%poh%) 胜出 && &nul
endlocal&goto :restart
if not defined 悔 goto :eof
if &!悔:~6,1!& equ && goto :eof
for %%a in (!悔:~^,6!) do (set str=%%a
set/a poh=!str:~-1!,pos=!str:~,1!
set/a piph=poh+pos-1,niph=19+pos-poh,liph=poh*2-1,lips=pos*2+1
if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)
if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)
for %%a in ( &he!poh! !pos!& &sh!pos! !poh!& &pi!piph! !pips!& &ni!niph! !nips!&) do (
&&&&&&& for /f &tokens=1,2& %%b in (%%a) do (
&&&&&&&&&&&&&&&&&&&&&&& set/a .=%%c-1
&&&&&&&&&&&&&&&&&&&&&&& for %%d in (!.!) do (set %%b=!%%b:~0,%%d!#!%%b:~%%c!)
for /f &tokens=1,2& %%b in (&li!liph! !lips!&) do (
&&&&&&& set/a .=%%c-1
&&&&&&& for %%d in (!.!) do (set %%b=!%%b:~0,%%d!┼!%%b:~%%c!)
set/a asc%zhi%-=1
set 悔=!悔:~6!
set error=你悔棋,耍赖皮!
if not defined 悔 goto :eof
set/a poh=!悔:~2,1!,pos=!悔:~1,1!,liph=poh*2-1,lips=pos*2+1
set say=say !z%pos%!!z%poh%!(%poh%)
taskkill /fi &WINDOWTITLE eq 批处理五子棋*& /im cmd.exe
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:806931次
积分:5277
积分:5277
排名:第3666名
原创:35篇
转载:115篇
评论:69条
(3)(1)(1)(1)(1)(1)(1)(3)(3)(2)(2)(2)(2)(1)(2)(1)(1)(2)(4)(2)(1)(2)(11)(2)(1)(1)(2)(3)(1)(12)(4)(6)(8)(6)(6)(8)(10)(24)(8)

我要回帖

更多关于 c语言循环移位 的文章

 

随机推荐