前言
给我整不会了,chao。。。
DOS命令基础
众所周知,网安学生啥都学,所以DOS也是绕不开的,只不过因为DOS多用于恶意小程序,以及一大堆没啥用的操作,很少有人学过这一门语言。
很多大佬问:DOS是干什么用的?
我只能苦笑说一个6。
据我所知(据我瞎扯),在计算机刚诞生的年代,是没有鼠标这种配件的,在这种情况下,DOS应运而生,通过命令行终端实现对文件、进程等等的操作。
DOS的破坏效果还是十分强大的,例如
- 无限弹出命令行
- 停止桌面进程
- 让某个恶意程序在开机时自启动
- 。。。。。。
echo 输出内容 类似于 print
学习DOS的第一步,自然是hello world。
首先,如果echo代表输出的话,我们就可以直接在bat文件中编辑
echo hello world!
点击运行后,会出现命令行一闪而过,咱也不到输出成功没有。
所以在上述命令后面,加入
pause
意义是在命令行输出之后暂停执行,避免命令行一闪而过的情况。
修改之后输出如下
可以看到。。。怎么评价,
非常难看,对吧。
前面的执行路径看着非常闹心,有没有哪行命令能够搞掉他呢。
有的。
在文件执行的最前面,输入
@echo off
即可实现想要的效果
问题代码
上述命令会了吧,那就看看我们这次的问题
依次往下看,首先第一行
@echo off,屏蔽屏幕不合理输出。
title qingshu,设置标题,这是我的情书。
color f0 ,将执行时的背景颜色设为白色(f0),其他颜色寄几搜,屑屑。
echo ==============,两个都是为了美观,(为了)看起来像边框。
echo 1.....
echo 2.....自定义选项。
先跳过下面的一连串if语句,
直接从 :1 开始看,
首先,:1即是设置了一个名称为1的块,当然,这里并不是因为前面的自定义选项有1,2,3而强制要求,只要你喜欢,这里的名甚至可以改成你的前女友(doge
1中有一个set命令,即为设置一个变量,/p则是将用户输入的值赋给前面的变量,等号右边的拼音,则是类似于python中input()里的enter
a = input("enter")
注意:如果没有/p的话,a就等于等号右边的那一长串。
而下面的shutdown,有以下数据供解释
shutdown -l 注销。这不能与 /m 或 /d 选项一起使用。
shutdown -s 关闭计算机。
shutdown -r 完全关闭并重新启动计算机。
shutdown -a 中止系统关闭。
shutdown -p 关闭本地计算机,没有超时或警告。
shutdown -h 休眠本地计算机。
shutdown -t xxx 将关闭前的超时时间设置为 xxx 秒。
shutdown -c "comment" 有关重新启动或关闭的原因的注释。
shutdown -f 强制关闭正在运行的应用程序而不事先警告用户。
shutdown -d [p|u:]xx:yy 提供重新启动或关闭的原因。
将这串命令丢出来后,就可以放心地讲goto了。
先说明这串代码中的几个块。
- menu
- 1
- 2
- 3
之所以在1、2中加入回到开头菜单的命令是因为
如果不回去的话,因为DOS命令是从上到下执行的
假设执行1,那么2、3也会在后续执行。
目光回到第一个set语句那里。
在这里,设置了一个名为num的变量,负责读取用户输入的数字,将其赋给自己。
通过goto语句,跳转到相应的块里面,执行相应的命令,而在变量左右加入%,则是表示引用该变量的值。
致命问题
在本段代码中,输入1之后并不能执行shutdown命令。
在我个人测试时,发现问题应该如下
shutdown是可以正常运行的,测试命令
shutdown -s -t 300
5分钟后关机,也是可以运行的。
问题就出在,如果执行
shutdown -s -t300
输出的错误信息和该程序正常执行报错是一样的。问题应该就出现在这,求大佬指教