无论是批处理文件还是shell都是没有意义的,它们只是一种工具,并且是非常低级难懂的工具。

如果不会,那就保持不会就好了。不要花费太多时间在这些没意义的事情上。

批处理的没意义体现在:

  • 难以表达

    随便一门正经的语言就比批处理清晰简洁
  • 玄学

    许多命令设计的毫无道理,白白的占用大脑容量。参数太多了,命令太多了。就连看一遍也要花费很长时间。

批处理文件注释的四种形式

  1. :: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)
  2. rem 注释内容(不能出现重定向符号和管道符号)
  3. %注释内容%(可以用作行间注释,不能出现重定向符号和管道符号)
  4. :标签 注释内容(可以用作标签下方段的执行内容)

变量

%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批处理文件打印幻方的更多相关文章

  1. windows批处理运行java程序

    明确需求 今天你编了一个java swing版照片查看器,想让计算机上的所有照片默认打开方式都改成你的照片查看器. 使用工具软件 很多工具软件都是不把jre打包到exe中的,这就是说打包之后的exe只 ...

  2. SQL Server数据库备份:通过Windows批处理命令执行

    通过Windows批处理命令执行SQL Server数据库备份 建立mybackup.bat ,输入以下内容直接运行该脚本,即可开始自动备份数据库也可把该脚本加入windows任务计划里执行. --- ...

  3. cmd下windows批处理,获取当前系统时间,生成日志文件名

    示例: rdGetRTData_log%date:~0,4%%date:~5,2%%date:~8,2%.txt 生成格式: rdGetRTData_log20151103.txt 编写Windows ...

  4. WINDOWS批处理命令使用大全

    来源:http://www.942dn.com就是爱电脑网 WINDOWS批处理命令使用大全 批处理,也称为批处理脚本,英文译为BATCH,批处理文件后缀BAT就取的前三个字母.它的构成没有固定格式, ...

  5. 常用的Windows批处理

      切换执行路径 如果不换盘的话:cd xxx换盘:cd /d xxx   获取当前日期 编写Windows批处理时经常会需要使用到日期和时间作为文件名,所以是非常重要的. 如何获取日期呢?格式:  ...

  6. windows批处理研究_不断更新

    windows批处理脚本(bat),很麻烦,主要原因有: 1.bat脚本编写的风格,太古老,调用方式太奇怪. 2.windows自身运行机制就对批处理脚本有兼容性问题.比如,鼠标双击打开一个bat,与 ...

  7. Windows批处理命令学习中遇到的坑--持续更新中

    再次拾起windows批处理命令,下边将一些遇到的小问题写出来,希望可以帮到大家 1.set命令:set主要的作用是为变量赋值,类似于编程语言中的var i = Value:但是在使用的过程中一定要注 ...

  8. [转帖]Windows批处理(cmd/bat)常用命令小结

    Windows批处理(cmd/bat)常用命令小结 非常值得学习的文档 先放这里 有时间做实验, 转载自:“趣IT”微信公共号 前言 批处理文件(batch file)包含一系列 DOS命令,通常用于 ...

  9. Windows 批处理大全(附各种实例)

    Windows 批处理大全(附各种实例) 2009年07月19日 21:31:00 阅读数:2552 批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命 ...

随机推荐

  1. hdu 4445 Crazy Tank

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...

  2. javascript简单性能问题及学习笔记

    最近在看一本书:<高性能javaScript>,发现自己平时写js存在很多小细节上的问题,虽然这些问题不会导致程序运行出错,但是会导致界面加载变慢,用户体验变差,那么我们就来细细数一下应该 ...

  3. Golang 中三种读取文件发放性能对比

    Golang 中读取文件大概有三种方法,分别为: 1. 通过原生态 io 包中的 read 方法进行读取 2. 通过 io/ioutil 包提供的 read 方法进行读取 3. 通过 bufio 包提 ...

  4. Leaf - 一个由 Go 语言编写的开发效率和执行效率并重的开源游戏服务器框架

    转自:https://toutiao.io/posts/0l7l7n/preview Leaf 游戏服务器框架简介 Leaf 是一个由 Go 语言(golang)编写的开发效率和执行效率并重的开源游戏 ...

  5. NTP Server

    Network Time Protocol互联网时间协议 NTP is intended to synchronize all participating computers to within a ...

  6. WebApi的缺点

    post只能传递对象 必须要参数一致,不能同名称

  7. Windows上使用“LogView”打开大文件

    最近因为工作需要要打开一个300+MB的文件,试过了N个编辑器不是打不开就是软件直接挂掉或是占用内存太大,已经严重影响了我的工作 还好在网络上找到老外写的一个免费软件,官网上说是可以打开4G+的文件( ...

  8. Mac 苹果OS X小技巧:如何更改文件的默认打开方式

    OS X小技巧:如何更改文件的默认打开方式 1.command + i 打开简介 2.选择合适的软件打开方式 3.选择全部更改 如图: 转自:http://digi.tech.qq.com/a/201 ...

  9. ThinkPHP3.2 新bug ReadHtmlCache 支持不区分大写和小写的函数

    报错提示: Fatal error: Function name must be a string in D:\wwwroot\zbphp.com\ThinkPHP\Library\Behavior\ ...

  10. Office安装错误1402的解决

    Office软件是我们工作是必备的,为了统一公司的办工软件,要把所有的WPS和Office2003版本全部换顾Office2010.在Win7下安装Office2010一般都不会存在什么大的问题,但遇 ...