Document : learn.microsoft.com/zh-cn/windo…
1. Task Scheduler
1.我的電腦 -> 右鍵管理 -> 工作排程器
2.直接輸入命令 taskschd.msc
2. Bat
2.1 Command
pause: 如果想要查看運行的結果,可以暫停黑窗口
@echo on:顯示執行的命令
@echo off:不顯示執行的命令
2.2 File
echo. > file.txt 創建txt文檔
echo "content" > file.txt 寫入content到txt文檔,覆蓋
echo "content" >> file.txt 寫入content到txt文檔,追加
2.3 Delete
1.RD:删除目录
-
/S:删除目录及目录下的所有子目录和文件。
-
/Q: XP中的增强DOS命令
RD /S /Q在进行删除操作时将取消确认
2.DEL:删除文件或目录
-
/F:可删除只读文件。
-
/S、/Q:使用此参数即“DEL/S”作用与“RD/S”完全相同,即删除目录及目录下的所有子目录和文件。同时使用参数/Q,可取消删除操作时的系统确认。
del /f /s /q C:\log\*.*
::日志路径
set log="D:\星程智慧物流系统\Logs"
:: 保留日志天数
set bak=5
:: 删除日志文件
forfiles /p %log% /M "*.log" /D -%bak% /C "cmd /c del @file"
@echo off
set target_folder="C:\path\to\folder"
set days_to_keep=7
for /d %%d in ("%target_folder%*") do (
set "folder_age=%%~td - %date:~0,4%%-%%date:~5,2%%-%%date:~8,2%%"
if /i "%%~nxd" lss "folder_age" del "%%d\*" /s /q /f
)
for %%f in ("%target_folder%*") do (
if /i "%%~nxf" lss "today - %days_to_keep% days" del "%%f" /q /f
)
1.删除文件夹下的文件
del /f /s /q C:\Users\Administrator\AppData\Local\Temp\*.*
2.删除空文件夹
rd /s /q C:\Users\dell\AppData\Local\Temp\A
3.删除文件和文件夹操作
del /f /s /q C:\Users\Administrator\AppData\Local\Temp\*.*
cd C:\Users\Administrator\AppData\Local\Temp
rd /s /q C:\Users\Administrator\AppData\Local\Temp
2.4 DateTime
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set hour=%time:~0,2%
set minute=%time:~3,2%
set second=%time:~6,2%
set timestamp=%year%%month%%day%%hour%%minute%%second%
echo %timestamp%
pause
:: get current datetime
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set dt=%%a
echo %dt%
set folderName=%dt:~0,6%
set day=%dt:~6,2%
2.5 Folder
set folder=%DATE%
md "y:/%folder%"
copy d:/DataBak/*.BAK "y:/%folder%"
rem CODE BY t0nsha
rem 关于提取date,time输出结果的一个批处理
rem “:”(冒号)和“~”波浪号必不可少!
rem “~”后的数字:为正数表示舍弃输出结果的前几位;直接跟负数表示取到输出结果的后第几位。
rem “,”后的数字:为正数表示取到输出结果的前第几位;为负数表示舍弃输出结果的后几位。
echo %date%
echo %date:~4%
@echo off
setlocal ENABLEEXTENSIONS
setlocal enabledelayedexpansion
rem 根据当前日期获取,年月日串
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set hour=%time:~0,2%
set minute=%time:~3,2%
set second=%time:~6,2%
set timestamp=%year%%month%%day%%hour%%minute%%second%
echo %timestamp%
echo "hello world">>%timestamp%.txt
rem get all file name in spec folder
rem set directory=F:\DSM\AOI_Script
set directory="%cd%"
set file_name_str=
for /f "delims=" %%i in ('dir /b %directory%') do (
set file_name_str=!file_name_str! %%i
)
echo %file_name_str%
2.6 if
注意空格
@echo off
Set inputValue=15
if %inputValue%==15 (
echo %inputValue%等于15
)
if %inputValue% equ 15 (
echo %inputValue%等于15
)
pause
@echo off
set inputValue=23
if %inputValue% gtr 100 (
echo 大于100
) else if %inputValue% gtr 10 (
echo 大于10
) else if %inputValue% gtr 0 (
echo 大于0
)
pause
@echo off
set filepath=C:\
if exist %filepath% (
echo %filepath%存在
)
if not exist %filepath% (
echo %filepath%不存在
)
2.7 跳出循環
@echo off
for /l %%i in (1,1,10) do (
if %%i==5 goto endLoop
echo %%i
)
:endLoop
echo "loop end"
2.8 Setlocal
SETLOCAL ENABLEEXTENSIONS #启用"命令扩展名"
SETLOCAL DISABLEEXTENSIONS #停用"命令扩展名"
SETLOCAL ENABLEDELAYEDEXPANSION #启用"延缓环境变量扩充"
SETLOCAL DISABLEDELAYEDEXPANSION #停用"延缓环境变量扩充"
2.9 Set
set #显示目前所有可用的变量,包括系统变量和自定义的变量
echo %SystemDrive% #显示系统盘盘符。系统变量可以直接引用
set p #显示所有以p开头的变量,要是一个也没有就设errorlevel=1
set p=aa1bb1aa2bb2 #设置变量p,并赋值为 = 后面的字符串,即aa1bb1aa2bb2
echo %p% #显示变量p代表的字符串,即aa1bb1aa2bb2
echo %p:~6% #显示变量p中第6个字符以后的所有字符,即aa2bb2
echo %p:~6,3% #显示第6个字符以后的3个字符,即aa2
echo %p:~0,3% #显示前3个字符,即aa1
echo %p:~-2% #显示最后面的2个字符,即b2
echo %p:~0,-2% #显示除了最后2个字符以外的其它字符,即aa1bb1aa2b
echo %p:aa=c% #用c替换变量p中所有的aa,即显示c1bb1c2bb2
echo %p:aa=% #将变量p中的所有aa字符串置换为空,即显示1bb12bb2
echo %p:*bb=c% #第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2
set p=%p:*bb=c% #设置变量p,赋值为 %p:*bb=c% ,即c1aa2bb2
set /a p=39 #设置p为数值型变量,值为39
set /a p=39/10 #支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3
set /a p=p/10 #用 /a 参数时,在 = 后面的变量可以不加%直接引用
set /a p=”1&0″ #”与”运算,要加引号。其它支持的运算符参见set/?
set p= #取消p变量
set /p p=请输入 屏幕上显示”请输入”,并会将输入的字符串赋值给变量p
3. String
3.1 截取
%var%變量截取方法
@echo off
set ifo=abcdefghijklmnopqrstuvwxyz0123456789
echo 原字符串(第二行为各字符的序号):
echo %ifo%
echo 123456789012345678901234567890123456
echo 截取前5个字符:
echo %ifo:~0,5%
echo 截取最后5个字符:
echo %ifo:~-5%
echo 截取第一个到倒数第6个字符:
echo %ifo:~0,-5%
echo 从第4个字符开始,截取5个字符:
echo %ifo:~3,5%
echo 从倒数第14个字符开始,截取5个字符:
echo %ifo:~-14,5%
pause
!var!變量的截取步驟相同
set "ifo=abcdefghijklmnopqrstuvwxyz0123456789"
echo 原字符串(第二行为各字符的序号):
echo !ifo!
echo 123456789012345678901234567890123456
echo 截取前5个字符:
echo !ifo:~0,5!
echo 截取最后5个字符:
echo !ifo:~-5!
echo 截取第一个到倒数第6个字符:
echo !ifo:~0,-5!
echo 从第4个字符开始,截取5个字符:
echo !ifo:~3,5!
echo 从倒数第14个字符开始,截取5个字符:
echo !ifo:~-14,5!
Demo
@echo off
echo 当前时间是:%time% 即 %time:~0,2%点%time:~3,2%分%time:~6,2%秒%time:~9,2%厘秒
pause
3.2 replace
@echo off
set aa=伟大的中国!我为你自豪!
echo 替换前:%aa%
echo 替换后:%aa:中国=中华人民共和国%
echo aa = %aa%
set "aa=%aa:中国=中华人民共和国%"
echo aa = %aa%
pause
3.3 合併
@echo off
set aa=伟大的中国!
set bb=我为你自豪!
echo %aa%%bb%
echo aa=%aa%
echo bb=%bb%
set "aa=%aa%%bb%"
echo aa=%aa%
pause
4. get file Name
1.獲取文件名
@echo off & setlocal enabledelayedexpansion
set path=C:\Users\wangsq\Desktop
set file_name_str=
for /f "delims=" %%i in ('dir /b %path%') do (
set file_name_str=!file_name_str! %%i
)
echo %file_name_str%
pause
2.獲取文件名
echo off
::"%cd%"当前文件夹;%DIR%设置一个变量
set DIR="%cd%"
echo DIR=%DIR%
:: 参数 /R 表示需要遍历子文件夹,去掉表示不遍历子文件夹
:: %%f 是一个变量,类似于迭代器,但是这个变量只能由一个字母组成,前面带上%%
:: 括号中是通配符,可以指定后缀名,*.*表示所有文件
for /R %DIR% %%f in (*.txt) do (
echo %%f
)
3.獲取文件名
for %%i in (*.txt*) do echo "%%i"
4.獲取文件夾名
判断文件夹名称是否等于一个值
@echo off
for /d %%i in (*) do (
echo %%i
if %%i==centosImages (
pause
)
)
pause
set DIR="%cd%"
:: delete folder
for /d %%D in ("%DIR%\*") do (
echo %%i
)
5. Folder
set "DIR=F:\DEMO"
:: no care the folder is exist
md "%DIR%\!reportYear!\!reportDay!"
::move file
move !reportName! %DIR%\!reportYear!\!reportDay!
6. Delay
@echo off
setlocal ENABLEEXTENSIONS
setlocal enabledelayedexpansion
set "startNum=1"
set "endNum=100"
:: Loop
for /L %%i in (%startNum%,1,%endNum%) do (
:: delay 1s
timeout /t 1 /nobreak >nul
::write hello world
echo hello world
)
endlocal
pause
7. Windows no Dispaly
1.在你写的批处理文件,开头加上以下三行代码即可
if "%1"=="hide" goto CmdBegin
start mshta vbscript:createobject("wscript.shell").run("""%~0"" hide",0)(window.close)&&exit
:CmdBegin
2.创建一个xxx.vbs文件,裡面執行xxx.bat
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "e:\dba_tools\copy_file.bat",0