转载于:
https://blog.csdn.net/qq_36838191/article/details/83046599
%~dp0[获取当前路径]
%~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,目录
cd %~dp0 :进入批处理所在目录
cd %~dp0bin\ :进入批处理所在目录的bin目录
示例
这个示例在win10 x64测试正常
::作用:以管理员身份安装Apache
d:
cd %~dp0bin
httpd.exe -k install -n “Apache24”
运行结果
以管理员身份运行 示例.bat ,执行结果如下:
C:\Windows\system32>d:
D:>cd D:\Server\Apache24\bin
D:\Server\Apache24\bin>httpd.exe -k install -n “Apache24”
我的常用命令
%cd%[执行的路径]
当前执行的路径,并非目标文件的路径
taskkill /f /im notepad.exe [终止进程]
taskkill /?打开帮助
cmd窗口中文乱码
在CMD窗口右键/默认值,打开属性选择 “默认代码页为简体中文GBK”,
获取命令帮助 xxx /?
遇到记不清楚的命令,但记得名字,就可以键入 命令名 空格 /?就会有详细的该命令的帮助了,比如:ping /? cd /?
查看内置命令的帮助信息
ver /?
cmd /?
set /?
rem /?
if /?
echo /?
goto /?
for /?
shift /?
call /?
其他常用的命令
type /?
find /?
findstr /?
copy /?
#一、基础语法
1.批处理文件是一个“.bat”结尾的文本文件,这个文件的每一行都是一条DOS命令。可以使用任何文本文件编辑工具创建和修改。
2.批处理是一种简单的程序,可以用 if 和 goto 来控制流程,也可以使用 for 循环。
3.批处理的编程能力远不如C语言等编程语言,也十分不规范。
4.每个编写好的批处理文件都相当于一个DOS的外部命令,把它所在的目录放到DOS搜索路径(path)中,即可在任意位置运行。
5.C:\AUTOEXEC.BAT 是每次系统启动时都会自动运行的,可以将每次启动时都要运行的命令放入该文件中。
6.大小写不敏感(命令符忽略大小写)
7.批处理的文件扩展名为 .bat 或 .cmd。
8.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe来运行该文件。
#二、参数
##1) 系统参数
%SystemRoot% === C:\WINDOWS (%windir% 同样)
%ProgramFiles% === C:\Program Files
%USERPROFILE% === C:\Documents and Settings\Administrator (子目录有“桌面”,“开始菜单”,“收藏夹”等)
%APPDATA% === C:\Documents and Settings\Administrator\Application Data
%TEMP% === C:\DOCUME1\ADMINI1\LOCALS~1\Temp (%TEM% 同样)
%APPDATA% === C:\Documents and Settings\Administrator\Application Data
%OS% === Windows_NT (系统)
%Path% === %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem (原本的设置)
%HOMEDRIVE% === C: (系统盘)
%HOMEPATH% === \Documents and Settings\Administrator
:: 枚举当前的环境变量
setlocal enabledelayedexpansion
FOR /F “usebackq delims==” %%i IN (set
) DO @echo %%i !%%i!
##2) 传递参数给批处理文件
%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。
变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用 %1 到 %9 顺序表示。
Sample:
call test2.bat “hello” “haha” (执行同目录下的“test2.bat”文件,并输入两个参数)
在“test2.bat”文件里写:
echo %1 (打印: “hello”)
echo %2 (打印: “haha”)
echo %0 (打印: test2.bat)
echo %19 (打印: "hello"9)
#三、批处理基本命令
##0. help 命令
/? 命令
语法: 命令 /?
可显示此命令的帮助信息
Sample: type /? >>tmp.txt (把 type 命令的帮助信息写入到tmp.txt文件里)
Sample: help type (显示跟“type /?”一样)
##1.Echo 命令
语法: echo [{on|off}] [message]
ECHO [ON | OFF] 打开回显或关闭回显功能。
ECHO 显示当前回显设置。
ECHO [message] 显示信息。
echo off 表示在此语句后所有运行的命令都不显示命令行本身;默认是on,on时会显示如: C:\文件夹路径>命令行。
在实际应用中我们会把这条命令和重定向符号( 也称为管道符号,一般用 > >> ^ )结合来实现输入一些命令到特定格式的文件中。
Sample: echo off
Sample: echo hello world (显示出“hello world”)
Sample: echo Windows Registry Editor Version 5.00 > c:\setupreg.reg (此前还没有 setupreg.reg 这个文件)
Sample: echo “SourcePath”=“D:\Win2003\” >> c:\setupreg.reg (追加内容进 setupreg.reg 这个文件)
##2.@ 命令
表示不显示@后面的命令,(在入侵过程中自然不能让对方看到你使用的命令啦)
@ 与 echo off 相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。
Sample: @echo off (此语句常用于开头,表示不显示所有的命令行信息,包括此句)
Sample: @echo please wait a minite…
Sample: @format X: /q/u/autoset
(format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这个参数给我们,效果和/y是一样的。)
##3.Goto 命令
语法:goto label (label是参数,指定所要转向的批处理程序中的行。)
指定跳转到标签行,找到标签行后,程序将处理从下一行开始的命令。
label标签的名字可以随便起,但是最好是有意义的,字母前必须加个冒号“:”来表示这个字母是标签。
goto命令就是根据这个冒号来寻找下一步跳到到那里。经常与 if 配合使用,根据不同的条件来执行不同的命令组。
例题见“5.Pause 命令”
##4.Rem 命令
语法:Rem Message…
(小技巧:用::代替rem)
注释命令,在C语言中相当与/…/,它并不会被执行,只是起一个注释的作用,便于别人阅读和自己日后修改。
Sample:@Rem Here is the description.
##5.Pause 命令
会暂停批处理的执行并在屏幕上显示Press any key to continue…的提示,等待用户按任意键后继续
Sample:
@echo off
:begin
copy a:. d:\back
echo Please put a new disk into driver A
pause
goto begin
在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:\back中。
显示的信息提示您将另一张磁盘放入驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键再次复制。
##6.Call 命令
语法: call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
参数: [Drive:][Path] FileName 指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。
调用另一个批处理程序,并且不终止父批处理程序。
如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令。
call 命令接受用作调用目标的标签。如果在脚本或批处