Windows批处理用法记录
查看手册
打开命令提示符窗口,如果对某个命令的用法不清楚,可以输入 /? 来查看手册。
如 cd /?
两种模式
一种是在黑框框里直接输入命令。
另一种是执行脚本文件。
需要注意的是,两种模式下稍有点区别,比方说:for命令里的变量,在命令行里是一个%,在批处理里是两个%。
C:\>for /?
对一组文件中的每一个文件执行某个特定命令。
FOR %variable IN (set) DO command [command-parameters]
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters
为特定命令指定参数或命令行开关。
在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable
而不要用 %variable。
文件夹操作
rd 删除一个目录。
/S 除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。
/Q 安静模式,带 /S 删除目录树时不要求确认
del 删除一个或多个文件。
/P 删除每一个文件之前提示确认。
/F 强制删除只读文件。
/S 删除所有子目录中的指定的文件。
/Q 安静模式。删除全局通配符时,不要求确认
/A 根据属性选择要删除的文件
用法记录
用两个%包起来的就是使用变量
@echo off set var1=3 echo %var1% pause@echo off chcp 65001 set dirname=HelloWorld if not exist %dirname% ( echo %dirname%文件夹不存在 ) else ( echo %dirname%文件夹存在 ) pause如何接收用户输入
@echo off chcp 65001 set /p var1=请输入: echo 您输入的是%var1% pause如何比较数字大小
@echo off chcp 65001 set var1=1 set var2=2 set var2a=2 if %var2% EQU %var2a% ( echo %var2%等于%var2a% ) if %var2% LEQ %var2a% ( echo %var2%小于或等于%var2a% ) if %var2% GEQ %var2a% ( echo %var2%大于或等于%var2a% ) if %var1% NEQ %var2% ( echo %var1%不等于%var2% ) if %var1% LSS %var2% ( echo %var1%小于%var2% ) if %var2% GTR %var1% ( echo %var2%大于%var1% ) pause如何使用for循环
rem 基础用法:没有开关 @echo off chcp 65001 for %%i in (a,b,c,"你好!我的朋友") do ( echo %%i ) pauserem 基础用法:有/L,根据set里面的设置进行循环 rem 格式:FOR /L %%variable IN (start,step,end) DO command @echo off chcp 65001 for /L %%i in (1,2,6) do ( echo %%i ) pause/F的用法有点复杂,我就不写了,哈哈。
/R 文件遍历
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] 检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。 如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符, 则枚举该目录树。rem 基础用法:有/R,文件夹遍历,打印AAA文件夹(包含子目录)下的所有png文件 @echo off chcp 65001 for /R C:\Users\xxx\Desktop\AAA %%i in (*.png) do ( echo %%i ) pauserem 基础用法:有/R,文件夹遍历,打印file文件夹下的所有子目录 @echo off chcp 65001 for /R D:\file %%i in (.) do ( echo %%i ) pauserem 基础用法:有/R,文件夹遍历,打印该bat所在目录及子目录下的所有文件 @echo off chcp 65001 for /R %%i in (*.*) do ( echo %%i ) pauserem 基础用法:有/R,文件夹遍历,打印该bat所在目录及子目录下的所有目录 @echo off chcp 65001 for /R %%i in (.) do ( echo %%i ) pause
写文件
输出重定向命令
> 清除文件中原有的内容后再写入
>> 追加内容到文件末尾,而不会清除原有的内容
主要将本来显示在屏幕上的内容输出到指定文件中
指定文件如果不存在,则自动生成该文件
@echo off
chcp 65001
set a1=1
set b1=2
set a2=3
set b2=4
echo %a1% > a.txt
echo %b1% >> b.txt
echo %a2% > a.txt
echo %b2% >> b.txt
echo 你看这是追加 >> b.txt
pause
延迟变量
批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。
rem 这是没有使用延迟变量的例子,打印出来是2
@echo off
set var1=2
set var1=3 & echo %var1%
pause
变量延迟的启动语句是 setlocal enabledelayedexpansion ,并且变量要用一对感叹号包起来。
rem 这是使用延迟变量的例子,打印出来是3
@echo off
setlocal enabledelayedexpansion
chcp 65001
set var1=2
set var1=3 & echo !var1!
pause
rem 这是不使用延迟变量的例子,打印出来全是2
@echo off
chcp 65001
set var1=2
for /L %%i in (1,1,3) do (
set /a var1=var1+1
echo %var1%
)
pause
rem 这是使用延迟变量的例子,打印出来是2,3,4
@echo off
setlocal enabledelayedexpansion
chcp 65001
set var1=2
for /L %%i in (1,1,3) do (
set /a var1=var1+1
echo !var1!
)
pause
调用程序
rem 这是调用exe的例子,很简单,直接指明路径就可以了,也可以传入参数
@echo off
chcp 65001
for /R %%i in (*.png) do (
D:\libwebp-1.2.2-windows-x64\bin\cwebp -q 100 %%i -o %%i -quiet
)
pause