[TOC]
取出Windows聚焦图片
setlocal EnableDelayedExpansion
set flag=0
cd /d "C:\Users\HP\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets"
rem 到源路径,/d 可以跨盘符cd
for %%i in (*) do (
for /f "delims=" %%j in (E:\HP\Pictures\123\1.txt) do (
if %%j==%%i set flag=1)
if !flag!==0 (
echo f|xcopy %%i E:\HP\Pictures\123\%%i
rem echo f|能够提前输入选择,否则这里会问是文件还是文件夹/f /d
rem 或者尝试用copy命令,不能复制文件夹
set c=%%~ti
rem 扩展成文件的时间 例:2020/04/17 08:33
set d=%%i
set c=!c:~5,2!!c:~8,2!-!c:~11,2!!c:~14,2!-!d:~0,2!
rem c:~5,2取出第5位后2位,即04
ren "E:\HP\Pictures\123\%%i" "!c!.jpg"
echo %%i>>E:\HP\Pictures\123\1.txt
rem >清空并追加 >>末尾追加,不会另起新行
)
set flag=0
)
echo.
替换重命名
set "str1=需要替换的字符串"
set "str2=替换后的字符串"
Setlocal Enabledelayedexpansion
for /f "delims=" %%i in ('dir /b *.ass') do (
rem 注释 dir /b 使用空格式(没有标题信息或摘要)
rem dir /a:d /b 仅列举文件夹
::for %%i in (*.ass) do (
set "var=%%i" & ren "%%i" "!var:%str1%=%str2%!")
不同变量形式
%0、%i、%%i、var、%var%、!var!
%0
这个是批处理程序中的固定用法,类似于C++程序main函数中argv变量数组,类比可以知道,argv[0]表示exe程序的文件名,argv[1]表示启动程序的第1个参数,后面依次类推。而在批处理程序中%0表示这个批处理程序的文件名,%1表示调用这个批处理时传入的第1个参数,%2表示调用这个批处理时传入的第2个参数,最大可以到%9
%i
在题目所列的这些变量中,这一个比较特殊,因为它不是批处理文件中的变量,只能用于cmd命令行下的for循环中,在命令行中for循环的语法是for %variable in (set) do command [command-parameters]
,其中的variable只能是单字母或者非特殊含义的字符,同样的for循环语句如果写在批处理文件中variable之前就要加两个%%了,先来看看%i的用法,直接在命令行中遍历集合打印输出
%%i
这种类型也是for循环中特有的,与%i相对,属于批处理程序的用法,如果在命令行中定义需要一个%,如果相同的语句定义在批处理文件中需要2个%%,换句话说就是在for循环中遍历的索引变量,语法为for %%variable in (set) do command [command-parameters]
,variable同样只能是单个字母或者普通字符,至于为什么同样含义的变量在批处理中要多加一个%,至今也没有找到官方的说法,查找MSDN也没有发现说明,不过就我个人理解可能就像我们在命令行中打印一个%,可以正常打印输出,如果通过printf()想输出%就需要2个%的原理一样吧,
%var%
在批处理中除了上面所说的在set语句后面的两种情况,再要想引用变量就需要在变量两端各加一个百分号%,明确的告诉引用者这是一个变量,使用时需要评估一下值,而不要当成字符串,上一个例子中echo后面想要输出的变量没有加%,那就被当成一个字符串处理,原样输出了
!var!
这是最后一种常见的变量形式,同时也是一种不太好理解的形式,需要记住一点,这种变量与延迟环境变量扩展有关,如果没开启延迟环境变量扩展,那么!var!就是一个普通的包含5个字母的字符串,如果开启了延迟环境变量扩展,那么它就是变量var的实际值,可能说到这有的人会产生疑惑,引用变量var的值不是使用%var%吗?那么在开启延迟环境变量扩展的情况下,%var%和!var!有什么区别呢?下面举个例子测试下,编写如下代码保存在extVar.bat文件中:
@echo off
set var1=110
set var1=120&echo %var1%
运行之后的结果为: 110
@echo off
setlocal enabledelayedexpansion
set var1=110
set var1=120&echo !var1!
运行之后的结果为: 120
ERRORLEVEL
上一命令运行结果,成功为1,失败0
tasklist | find "shuttle_certd3003.exe"
set result=%ERRORLEVEL%
if %result% equ 1 (echo not running)else (echo running)
find|findstr查找
systeminfo | findstr "BIOS"
findstr支持正则
结合quicker软件搜索题库
@echo off
setlocal EnableDelayedExpansion
set /a flag=0
rem findstr "%1" C:\Users\zym\Documents\Quicker\zym\11.csv
for /f "delims=" %%A in ('findstr "%1" C:\Users\zym\Documents\Quicker\zym\11.csv') do (
set /a flag+=1
rem 最多显示6-1行内容
if !flag! GTR 6 (
exit
)
echo %%A
)
使用sc命令手动管理Windows服务
当需要管理(增加、删除、修改等)Windows系统中的系统服务时,可使用Windows系统提供的sc命令来管理系统服务。 sc命令中的大部分“命令参数”需要“以管理员身份运行”
sc命令格式
sc [server] <command> <ServiceName> [OptionName= "value"] ["option2"]
(按照惯例,以上各项参数中,被“中括号 [xxx]”包裹的选项表示为“可选项”,被“尖括号
- server:管理远程机器时,可以是 机器名或IP地址,如: \\\myserver 或 \\\192.168.0.1 。管理本机时可省略此项。
- command:命令参数。如 create, description, config, query, start, stop, delete 等等(说明:这里可以用普通用户身份执行query命令,未尝试其他未列出的命令参数)。
- ServiceName:自定义的不可重复的服务名,用于后续操作服务的服务名(类似于数据库记录的唯一主键的作用)。
- OptionName= "value":“选项名称”和“选项值”,设置相关选项及值。“选项值”可用英文双引号括起来。注意,等号后面必须有一个英文空格;如果命令中的选项值需要进行双引号的嵌套,使用反斜杠加引号 " \" " 来进行转义处理。
- option2:(无选项名称的)选项值,可用英文双引号括起来。
常用命令分析
(以管理Nginx服务为例)
1. 添加服务
sc create Nginx1.12.0 binpath= "D:\GreenSoftwares\nginx-1.12.0\nginx.exe -p \"D:/GreenSoftwares/nginx-1.12.0\"" DisplayName= "Nginx Web服务器 http://nginx.org" start= delayed-auto
* 上面紧跟在create命令后面的 Nginx1.12.0 是自定义的服务名(不能包含空格符);
* binpath:启动服务时需要执行的命令(注意在等号右侧必须有一个英文空格,下同);
* DisplayName:服务的自定义显示名称;
* start:服务的启动类型。如: boot
, system
, demand
(手动启动), auto
(自动启动), delayed-auto
(自动启动-延迟启动), disabled
(禁止启动)。
2. 给服务设置描述信息
sc description Nginx1.12.0 "启动或停止Nginx服务器"
* 修改服务配置
使用sc config命令修改已有服务的一项或多项配置信息。
* 修改显示名称: sc config Nginx1.12.0 DisplayName= "Nginx server v1.12.0"
* 修改启动类型:sc config Nginx1.12.0 start= auto
- 服务状态修改
* 查看服务状态
sc query Nginx1.12.0
* 启动服务
sc start Nginx1.12.0
,该命令不会输出启动信息(或 net start Nginx1.12.0 ,会输出启动信息)
* 停止服务
sc stop Nginx1.12.0
,该命令不会输出停止信息 (或 net stop Nginx1.12.0,会输出停止信息)
* 删除服务
sc delete Nginx1.12.0
实例
%1 start "" mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c ""%~s0"" ::","","runas",1)(window.close)&&exit
SETLOCAL enabledelayedexpansion
:menu
cls
echo.
echo VMware相关服务运行状态:
for /f "delims=" %%i in ('sc query "VMAuthdService"') do (echo %%i |find "STATE" && echo VMAuthdService)
for /f "delims=" %%i in ('sc query "VMware NAT Service"') do (echo %%i |find "STATE" && echo VMware NAT Service)
echo.
set /p mode= 开启或关闭服务:开启(1)/关闭(2):
if %mode% equ 1 goto sc_enable
if %mode% equ 2 goto sc_disable
:sc_enable
echo.
echo 正在启动。。。
sc start "VMAuthdService">nul
sc start "VMware NAT Service">nul
choice /t 1 /d y /n>nul
goto menu
:sc_disable
echo.
echo 正在停止。。。
sc stop "VMAuthdService">nul
sc stop "VMware NAT Service">nul
choice /t 1 /d y /n>nul
goto menu
pause