命令参考
脚本
1. 网上看到的一个bat脚本,自动打开notepad。当时遇到=号前后空格问题,调试了好久就是找不到问题。。
@echo off
set _task=notepad.exe
set _svr=c:\windows\notepad.exe
set _des=start.bat
:checkService
for /f "tokens=1" %%n in ('tasklist ^| find "%_task%" ') do (
if %%n==%_task% (
goto checkMessage
) else (
goto restartService
)
)
:restartService
echo %time%
echo ********程序开始启动********
echo 程序重新启动于 %time% ,请检查系统日志 >> restart_service.txt
echo start %_svr% > %_des%
echo exit >> %_des%
start %_des%
REM set /p=.<nul 不换行在屏幕输出....
set /p=.<nul
for /L %%i in (1 1 10) do set /p a=.<nul & ping.exe /n 2 127.0.0.1>nul
echo .
del %_des% /Q
echo ********程序启动完成********
goto checkService
:checkMessage
echo %time% 程序运行正常,5秒后继续检查..
ping localhost -n 5
goto checkService2. 自动清理浏览器Edge Firefox Chrome的缓存并打开指定url。clearBrowserCache&Cookies.bat
3. 替换文件中指定字符串,可指定替换找到的全部或者指定字符串。replace.bat
注意:
1. =号前后不能有空格。
set new = test
echo %new%
::得到的结果为空,new跟"="之间有空格,默认new没赋值为空。这个脚本的效果相当于echo ,即开启echo
::C:\>2.bat
::C:\>set new = test
::C:\>echo
::ECHO is on.
::"="跟后面的内容之间有空格,则new的值为" test",而不是"test"
::C:\>2.bat
::C:\>set new= test
::C:\>echo Result: test
::Result: test
2. 处理文件夹或文件需要多个匹配
例如:想删除C:\bat内以folder开头的文件夹里面的以test开头的文件
::路径中文件夹不能使用通配符*
c:\bat>del "C:\bat\folder*\test*"
The filename, directory name, or volume label syntax is incorrect.
::路径正确,最后的文件名可以使用通配符*
c:\bat>del "C:\bat\folder1\test*"
::使用for循环,在多个folder处循环
set DIR=C:\bat
for /f "delims=" %%a in ('dir /ad /b %DIR%') do (
echo %%a|findstr /m "folder" >> null && del %DIR%\%%a\test*
)
3. bat的环境变量,在cmd里面显示环境变量,格式是 echo %time%
%cd%------->bat启动的目录
%~dp0------>bat所在的目录
%userprofile%: 对应用户所在迷路 C:\User\<Username>
%time%: 当前时间 格式10:31:04.46。时分秒加毫秒。可以%time:~0,2%表示从0位开始截取2位,得到当前时间的小时数。
%date%: 当前日期格式 Wed 03/02/2022。
4. BAT中字符转义
bat中的字符转义用^,如^<表示小于号,否者会被识别成输入输出重定向功能的<
参考批处理特殊符号 通配符与转义符_bytxl的专栏-CSDN博客_bat 转义字符
有几个特殊情况, 如% ",转义格式是%%,"""
5. For 循环
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ('string') DO command [command-parameters]
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]
options:如果in后面的是文件,这里会按行读取内容,并按各种options来得到最终的字符串
delims=xx是分隔符,将整个文件/字符串/command结果 按分隔符分割,没有写delims或者其等于号后面没有值,按默认blank和tab分割。若要保留空格,可以选一个在文件里面没有的符号,如delims=:。
tokens=x,y,m-n,每行内容按分隔符分割后,提取第x段,y段,m到n的内容。
for /f "tokens=* delims=:" %%i in (%testiles%) do (echo %%i>1.txt)
所以这句话的效果是,读取变量%testiles%中每行内容,使用:分割,提取所有分割后的内容到变量%i中,最后把每行得到的%i输出到1.txt中
6. For 循环中tokens注意点
for /f "delims=. tokens=1-3" %%a in ("1.2.3") do echo %%a
这样得到的结果是1,虽然tokens是截取了分割的第1,2,3段内容,但实际赋值的时候,%%a里面只有第一段内容,如果想取其他两段的内容,可以用%%b和%%c,即在for循环中定义字母按顺序后的字母,就可以拿到对应分割的第二段和第三段内容
7. Set 设置用户输入内容
set后面加/a,表示后面的是数字表达式。/p 表示需要用户输入,且=后面的内容会显示在cmd上,用户输入的内容会赋值给变量
set /a a=0
set /a a+=1
set /p test=测试变量:
echo %test%