windows批处理文件打印幻方
无论是批处理文件还是shell都是没有意义的,它们只是一种工具,并且是非常低级难懂的工具。
如果不会,那就保持不会就好了。不要花费太多时间在这些没意义的事情上。
批处理的没意义体现在:
- 难以表达
随便一门正经的语言就比批处理清晰简洁 - 玄学
许多命令设计的毫无道理,白白的占用大脑容量。参数太多了,命令太多了。就连看一遍也要花费很长时间。
批处理文件注释的四种形式
- :: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)
- rem 注释内容(不能出现重定向符号和管道符号)
- %注释内容%(可以用作行间注释,不能出现重定向符号和管道符号)
- :标签 注释内容(可以用作标签下方段的执行内容)
变量
%CD% - 扩展到当前目录字符串。
%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。
%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。
%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。
%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。
%CMDEXTVERSION% - 扩展到当前命令处理器扩展版本号。
%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。
%HIGHESTNUMANODENUMBER% - 扩展到此计算机上的最高 NUMA 节点号。
set命令
控制台下输入help查看全部命令
set命令可以查看全部环境变量
help set可以查看set命令的详细信息
set \p
/P 命令行开关允许将变量数值设成用户输入的一行输入。读取输入
行之前,显示指定的 promptString。promptString 可以是空的。set \a
/A 命令行开关指定等号右边的字符串为被评估的数字表达式。
其它重要词汇
help if
help for
代码
只能打印奇数阶幻方
@echo off
:start
set /p n=Please input your odd integer:
set /a p=n%%2
if %p% equ 0 echo Input error! && goto start
set /a i=%n%
set /a t=(%n%+1)/2
set /a a%t%_%n%=1,temp=1,m=n-1,p=n
:repeat
set /a p-=1
if %p% lss 0 goto array
for /l %%a in (1 1 %m%) do (
setlocal enabledelayedexpansion
if !t! gtr %n% set /a t=1
if !i! gtr %n% set /a i=1
set /a s=!t!+1,q=!i!+1
if !s! gtr %n% set /a s=1
if !q! gtr %n% set /a q=1
set /a a!s!_!q!=a!t!_!i!+1,t+=1,i+=1
set /a temp+=1
if !temp! equ %n% (
set /a temp=1,tmp=a!s!_!q!,q-=1,i-=1
if !q! equ 0 set /a q=n
set /a a!s!_!q!=tmp+1
goto repeat
)
)
pause
:array
echo Now behold the powerful Magic Sqaure^^!:
set /a a!t!_!n!=1
for /l %%c in (!n! -1 1) do (
for /l %%d in (1 1 !n!) do (
set /a result=a%%d_%%c
set /p=!result!<nul
)
echo.
)
pause>nul
代码详细解释如下
@echo off
关闭回显
:start
语句标号,用于语句跳转
set /p n=Please input your odd integer:
/p开关用于读入数据,读入之前显示提示信息
set /a p=n%%2
/a开关用于表达式求值,因为%用来表示变量,所以%%表示一个%,即取模
if %p% equ 0 echo Input error! && goto start
如果p==0,说明输入值n为偶数,程序只能处理奇数情况,所以跳转到start,要求用户重新输入
set /a i=%n%
set /a t=(%n%+1)/2
set /a a%t%_%n%=1,temp=1,m=n-1,p=n
在第一行,正中间,填1
:repeat
set /a p-=1
if %p% lss 0 goto array
p用来记录填过多少个数字,p从n减到0
for /l %%a in (1 1 %m%) do (
变量a从1按步长为1递增至m=n-1
setlocal enabledelayedexpansion
if !t! gtr %n% set /a t=1
若t>n,则t=1
if !i! gtr %n% set /a i=1
若i>n,则i=1
a(t,i)处的数值
set /a s=!t!+1,q=!i!+1
if !s! gtr %n% set /a s=1
if !q! gtr %n% set /a q=1
a(s,q)处的数值,为a(t,i)的右下角
set /a a!s!_!q!=a!t!_!i!+1,t+=1,i+=1
令a(s,q)=a(t,i),同时向右下角走一格
set /a temp+=1
temp表示当前的一个小圈,也就是斜着填n个数字
if !temp! equ %n% (
如果temp=n说明已经走完一个圈了,应该向左下角走一格,如果左下角走出了边界,那就要走回来
set /a temp=1,tmp=a!s!_!q!,q-=1,i-=1
if !q! equ 0 set /a q=n
set /a a!s!_!q!=tmp+1
goto repeat
走完一圈之后开始下一圈
)
)
pause
:array
运行结束,下面打印结果
echo Now behold the powerful Magic Sqaure^^!:
set /a a!t!_!n!=1
for /l %%c in (!n! -1 1) do (
第一重for循环从n递减到1
for /l %%d in (1 1 !n!) do (
第二重for循环从1递增到n
set /a result=a%%d_%%c
set /p=!result!<nul
nul为null文件,因为set /p命令可以输出prompt用于提示用户输入,这里使用nul文件输入空,所以跳过了用户输入过程,只进行提示,也就相当于输出语句
)
echo.
输出一个换行
)
pause>nul
windows批处理文件打印幻方的更多相关文章
- windows批处理运行java程序
明确需求 今天你编了一个java swing版照片查看器,想让计算机上的所有照片默认打开方式都改成你的照片查看器. 使用工具软件 很多工具软件都是不把jre打包到exe中的,这就是说打包之后的exe只 ...
- SQL Server数据库备份:通过Windows批处理命令执行
通过Windows批处理命令执行SQL Server数据库备份 建立mybackup.bat ,输入以下内容直接运行该脚本,即可开始自动备份数据库也可把该脚本加入windows任务计划里执行. --- ...
- cmd下windows批处理,获取当前系统时间,生成日志文件名
示例: rdGetRTData_log%date:~0,4%%date:~5,2%%date:~8,2%.txt 生成格式: rdGetRTData_log20151103.txt 编写Windows ...
- WINDOWS批处理命令使用大全
来源:http://www.942dn.com就是爱电脑网 WINDOWS批处理命令使用大全 批处理,也称为批处理脚本,英文译为BATCH,批处理文件后缀BAT就取的前三个字母.它的构成没有固定格式, ...
- 常用的Windows批处理
切换执行路径 如果不换盘的话:cd xxx换盘:cd /d xxx 获取当前日期 编写Windows批处理时经常会需要使用到日期和时间作为文件名,所以是非常重要的. 如何获取日期呢?格式: ...
- windows批处理研究_不断更新
windows批处理脚本(bat),很麻烦,主要原因有: 1.bat脚本编写的风格,太古老,调用方式太奇怪. 2.windows自身运行机制就对批处理脚本有兼容性问题.比如,鼠标双击打开一个bat,与 ...
- Windows批处理命令学习中遇到的坑--持续更新中
再次拾起windows批处理命令,下边将一些遇到的小问题写出来,希望可以帮到大家 1.set命令:set主要的作用是为变量赋值,类似于编程语言中的var i = Value:但是在使用的过程中一定要注 ...
- [转帖]Windows批处理(cmd/bat)常用命令小结
Windows批处理(cmd/bat)常用命令小结 非常值得学习的文档 先放这里 有时间做实验, 转载自:“趣IT”微信公共号 前言 批处理文件(batch file)包含一系列 DOS命令,通常用于 ...
- Windows 批处理大全(附各种实例)
Windows 批处理大全(附各种实例) 2009年07月19日 21:31:00 阅读数:2552 批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命 ...
随机推荐
- post文件的html
<HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio& ...
- 安卓下查看kmsg内核日志
cat /proc/kmsg <6>[ 2601.360] c0@A7 lm3695_early_suspend 247<6>[ 2601.380] c1@A7 gp2ap_e ...
- 《深入理解C#(第3版)》
<深入理解C#(第3版)> 基本信息 原书名:C# in depth 作者: (英)Jon Skeet 译者: 姚琪琳 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:978 ...
- 3D屏保程序:汉诺塔
学过程序的人一定记得汉诺塔.我们学的第一个程序是HelloWorld,而碰到的第一个坑就是汉诺塔,短短十几行代码,不知花费了多少时间精力去理解.我记得当年的开发环境还是蓝屏的,汉诺塔程序的输出还是一行 ...
- 最小均方算法(LMS Algorithm)理论及DSP实现
LMS算法可认为是机器学习里面最基本也比较有用的算法,神经网络中对参数的学习使用的就是LMS的思想,在通信信号处理领域LMS也非常常见,比如自适应滤波器. 本文主要对LMS(Least Mean Sq ...
- HDU1226:超级密码(BFS)
Problem Description Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息: 密码是一个C进 ...
- Word Break II leetcode java
题目: Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where e ...
- 《iOS Human Interface Guidelines》——Search Bar
搜索栏 搜索栏接收用户输入用于搜索的文本(例如以下,带有占位文本). API NOTE 查看UISearchBar学习怎样在你的代码中定义搜索栏.查看UISearchDisplayController ...
- 【MySQL】MySQL-主从复制-集群方案-数据一致性问题解决方案 && MySQL备份的各种姿势
1.写性能如何保证:分库分表 2.读性能如何保证:主从结构,实时备份 3.一致性问题怎么解决: 3.1.微博案例:Redis缓存,热数据查询走Redis,主从的延迟通过Redis消除 3.2.支付宝的 ...
- [Functional Programming 101] runWIth, evalWith, execWith
Recentlly, I am learning crocks.js ADT libaray. In the beginning, it is hard to understand when to u ...