bat语法

注释

:: 注释无回显
rem 注释有回显

 关闭和开启回显

:: 关闭回显
@echo off
echo abc
:: 开启回显
echo on
echo 123

 查看命令帮助说明

rd /?

 目录操作

创建目录(包含子目录)
md mp3ac

删除空目录
rd mp3

/q安静模式 /s递归
rd /q/s mp3

重命名目录 mp3源 mp3bak目标
rename mp3 mp3bak

文件操作 

:: 创建文件cc.txt
cd.>cc.txt

:: 往文件里写数据
echo this is ceshi > ceshi.txt

:: 查看文件内容
type ceshi.txt


:: 删除文件
:: 删除指定文件,不能是隐藏、系统、只读文件
del d:	est.txt            

:: #删除 d:	emp 文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录
del /q/a/f d:	emp*.*   

::  #删除 d:	emp 及子文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录
del /q/a/f/s d:	emp*.*  


copy 拷贝文件

例:copy key.txt c:doc  // 将当前目录下的key.txt拷贝到c:doc下(若doc中也存在一个key.txt文件,会询问是否覆盖)

例:copy jobs c:doc  // 将当前目录下jobs文件夹中文件(不递归子目录)拷贝到c:doc下(若doc中也存在相应的文件,会询问是否覆盖)

例:copy key.txt c:dockey_bak.txt  // 将当前目录下的key.txt拷贝到c:doc下,并重命名为key_bak.txt(若doc中也存在一个key_bak.txt文件,会询问是否覆盖)

例:copy /Y key.txt c:doc  // 将当前目录下的key.txt拷贝到c:doc下(不询问,直接覆盖写)

例:copy key.txt +  // 复制文件到自己,实际上是修改了文件日期

例:copy /Y key1.txt + key2.txt key.txt  // 将当前目录下的key1.txt与key2.txt的内容合并写入key.txt中(不询问,直接覆盖写)

例:copy /B art_2.7z.* art_2.7z    // 将当前目录下的art_2.7z.开头的所有文件(按照名称升序排序)依次合并生成art_2.7z

例:copy /B art_2.7z.001+art_2.7z.002 art_2.7z    // 将当前目录下的art_2.7z.001、art_2.7z.002文件合并生成art_2.7z

xcopy  更强大的复制命令

例:xcopy c:athai d:hello /s /h /e /f /c /y   // 将c:athai中的所有内容拷贝到d:hello中  注意:需要在hello后加上  表示hello为一个目录,否则xcopy会询问hello是F,还是D,/y不询问

例:xcopy c:athai d:hello /d:12-29-2010  // 将c:athai中的2010年12月29日后更改的文件拷贝到d:hello中

move 移动文件

例:move *.png test  // 将当前目录下的png图片移动到当前目录下test文件夹中 (若test中也存在同名的png图片,会询问是否覆盖)

例:move /Y *.png test  // 将当前目录下的png图片移动到当前目录下test文件夹中 (不询问,直接覆盖写)

例:move 1.png d: est2.png  // 将当前目录下的1.png移动到d盘test文件夹中,并重命名为2.png (若test中也存在同名的png图片,会询问是否覆盖)

例:move test d: ew  // 若d盘中存在new文件夹,将当前目录下的test文件夹移动到d盘new文件夹中;若不存在,将当前目录下的test文件夹移动到d盘,并重命名为new

date时间

:: 显示时间 (2018/09/20 周四)
set DT=%date%
echo %DT%

::显示时间 年(2018),说明:从开头取4个
set year=%date:~,4%
echo %year%

::显示时间月(09),说明:从第5个起取2个
set month=%date:~5,2%
echo %month%

::显示时间日(20),说明:从第8个起起2个
set day=%date:~8,2%
echo %day%

:: 显示时间(16:23:13.56)
echo %time%

:: 显示时(16或0x)
set time_hh=%time:~0,2% 
if /i %time_hh% LSS 10 (set time_hh=0%time:~1,1%)
echo %time_hh%

:: 显示分
set time_mm=%time:~3,2%
echo %time_mm%

:: 显示秒
set time_ss=%time:~6,2%
echo %time_ss%

:: 显示20180920_162335
set time_hh=%time:~0,2% 
if /i %time_hh% LSS 10 (set time_hh=0%time:~1,1%) 
set DT=%date:~,4%%date:~5,2%%date:~8,2%_%time_hh:~,2%%time:~3,2%%time:~6,2%
echo %DT%

 删除10天前的文件

set BakDir="E:ackuporacle"
forfiles /p %BakDir% /s /m *.* /d -10 /c "cmd /c del @file"

 if else

:: 111.txt 存在 就删除
if exist 111.txt del 111.txt

:: 111.txt 存在就复制一份111bak.txt
echo this is ceshi > 111.txt
if exist 111.txt copy /y 111.txt 111bak.txt

:: 存在和不存在
if exist d:111.txt (echo 111.txt存在) else ( echo 111.txt 不存在) ::
if else set abc=1234 if %abc%== 123 ( echo == echo ==2 ) else ( echo != echo !=2 )

for

===/d遍历目录

:: 循环遍历目录
for /d %%i in (c:*) do echo %%i

:: *正则批配任意字符  ?批配一个字符
for /d %%i in (d:??) do echo %%i


:: ====/r 递归遍历文件 in里可以正则批配文件名
for /r d:at %%i in (*) do @echo %%i 


:: ====/l 迭代数值范围 (1,1,5)这个参数也就是表示从1开始每次加1直到5终止
for /l %%i in (1,1,5) do (
    @echo %%i 
)


::========/f 
::文件内容
::第1行1 第1行2 第1行3
::第2行1 第2行2 第2行3
::第3行1 第3行2 第3行3
::第4行1 第4行2 第4行3

:: 读写文件所有内容,内容里有空格会断
for /f %%i in (111.txt) do echo %%i

:: 空格为分隔 显示第1列
for /f "delims= " %%i in (111.txt) do echo %%i

:: 空格为分隔 显示第2列
for /f "tokens=2 delims= " %%i in (111.txt) do echo %%i

:: 空格分隔显示2 3 列 %%i为列1 %%j为列2  i和j要是连续的字母
for /f "tokens=2,3 delims= " %%i in (111.txt) do echo %%i %%j
原文地址:https://www.cnblogs.com/hanxiaohui/p/9681758.html