如下代码:
@echo off
for /f "skip=1 tokens=3" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID') do set "EditionID=%%i"
set "Server=%EditionID:~0,6%"
if "%Server%"=="Server" (
%eline%
echo HWID 激活不支持 Windows Server。
echo 请使用 KMS38 或联机 KMS 选项。
goto dk_done
)
说明:
这里就是读取注册表中EditionID的值
因为这里的reg query结果有2行,我们用skip=1跳过第一行,如果是skip=2自然就是跳过前两行
再用tokens=3提取第三列,结合前面的skip=1,就是提取第2行的第三列
tokens=1,5就是代表第1列和第5列,tokens=1-5代表1至5列
tokens=1,5*代表第1列,第5列后面所有的列
只有tokens=没有值就是表示提取全部列
不用tokens时只显示第一个分隔符前的内容,第一个分隔符和第一个分隔符后面的内容将被忽略
不用delims就表示用默认的空格和;和,做为分隔符
一般要取整行内容通常会用"delims="(后面没空格和指定的分隔符)这样的形式不分隔行为多列
delims=可以定义多个分隔符,但符号之间不用空格,如果用空格做分隔符要放到最后
delims=后面的字符的意识是,将文本每行的内容以delims=后面的字符分割成若干列
综合使用:
for /f "skip=1 tokens=3 delims=."
说明:delims参数放最后,可以加空格为分隔符,如for /f "skip=1 tokens=3 delims=. "
%EditionID:~0,6% 为取变量%EditionID%的前6个字符
~0意思是从0个字符后开始,6就是提取6个字符
比如取一些特定变量的值 如年%date:~0,4% 小时%time:~0,2%
@REM 提取年月日信息
echo %date:~0,10%
@REM 提取星期几信息
echo %date:~-3%
@REM 提取时间中的时和分
echo %time:~0,5%
@REM 提取时和分和秒信息
echo %time:~0,-3%
@REM 年
echo %Date:~0,4%
@REM 月
echo %Date:~5,2%
@REM 日
echo %Date:~8,2%
@REM 时
echo %Time:~0,2%
@REM 分
echo %Time:~3,2%
@REM 秒
echo %Time:~6,2%
上述取小时的代码存在问题, 如果时间小于10点, 上述得到的小时为" 9"有空格而不是"09", 容易导致问题;
将小时不足10的前面补0以免代码出现空格:
set time0=%time: =0%
set hour=%time0:~0,2%
或者
set hour=%time:~0,2%
if %hour% LSS 10 (
set hour=0%time:~1,1%
)
一些实例:
echo 原字符串为:%abc%
echo 截取前5个字符:%abc:~0,5%
echo 截取最后5个字符:%abc:~-5%
echo 截取第一个到倒数第6个字符:%abc:~1,-5%
echo 从第4个字符开始截取5个字符:%abc:~3,5%
echo 从倒数第14个字符开始截取5个字符:%abc:~-14,5%
其他示例:
@echo off
for /f "tokens=8 delims=\_" %%i in ('reg query "HKLM\system\currentcontrolset\services" ^| findstr OneSyncSvc_ ') do set "LUID=%%i"
if "%LUID%"=="" ( ping baidu.com&pause&exit)
reg add "HKLM\SYSTEM\ControlSet001\Services\OneSyncSvc_%LUID%" /v "Start" /t REG_DWORD /d 4 /f
说明:
| 为管道符号,其作用为传输。连接两个或者多个命令,并从左往右依次传输命令的执行结果,比如:command1 | command2 ,管道 | 的功能就是把第一个命令command1执行结果作为输入参数传递给command2。
转义符^是用在特殊符号之前,起到取消特殊字符的作用。
findstr或find是查找命令, findstr OneSyncSvc_就是只保留带OneSyncSvc_的结果。
@echo off
for /f "skip=1 tokens=3" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v EditionID') do set "EditionID=%%i"
set "Server=%EditionID:~0,6%"
if "%Server%"=="Server" (
%eline%
echo HWID 激活不支持 Windows Server。
echo 请使用 KMS38 或联机 KMS 选项。
goto dk_done
)
说明:
这里就是读取注册表中EditionID的值
因为这里的reg query结果有2行,我们用skip=1跳过第一行,如果是skip=2自然就是跳过前两行
再用tokens=3提取第三列,结合前面的skip=1,就是提取第2行的第三列
tokens=1,5就是代表第1列和第5列,tokens=1-5代表1至5列
tokens=1,5*代表第1列,第5列后面所有的列
只有tokens=没有值就是表示提取全部列
不用tokens时只显示第一个分隔符前的内容,第一个分隔符和第一个分隔符后面的内容将被忽略
不用delims就表示用默认的空格和;和,做为分隔符
一般要取整行内容通常会用"delims="(后面没空格和指定的分隔符)这样的形式不分隔行为多列
delims=可以定义多个分隔符,但符号之间不用空格,如果用空格做分隔符要放到最后
delims=后面的字符的意识是,将文本每行的内容以delims=后面的字符分割成若干列
综合使用:
for /f "skip=1 tokens=3 delims=."
说明:delims参数放最后,可以加空格为分隔符,如for /f "skip=1 tokens=3 delims=. "
%EditionID:~0,6% 为取变量%EditionID%的前6个字符
~0意思是从0个字符后开始,6就是提取6个字符
比如取一些特定变量的值 如年%date:~0,4% 小时%time:~0,2%
@REM 提取年月日信息
echo %date:~0,10%
@REM 提取星期几信息
echo %date:~-3%
@REM 提取时间中的时和分
echo %time:~0,5%
@REM 提取时和分和秒信息
echo %time:~0,-3%
@REM 年
echo %Date:~0,4%
@REM 月
echo %Date:~5,2%
@REM 日
echo %Date:~8,2%
@REM 时
echo %Time:~0,2%
@REM 分
echo %Time:~3,2%
@REM 秒
echo %Time:~6,2%
上述取小时的代码存在问题, 如果时间小于10点, 上述得到的小时为" 9"有空格而不是"09", 容易导致问题;
将小时不足10的前面补0以免代码出现空格:
set time0=%time: =0%
set hour=%time0:~0,2%
或者
set hour=%time:~0,2%
if %hour% LSS 10 (
set hour=0%time:~1,1%
)
一些实例:
echo 原字符串为:%abc%
echo 截取前5个字符:%abc:~0,5%
echo 截取最后5个字符:%abc:~-5%
echo 截取第一个到倒数第6个字符:%abc:~1,-5%
echo 从第4个字符开始截取5个字符:%abc:~3,5%
echo 从倒数第14个字符开始截取5个字符:%abc:~-14,5%
其他示例:
@echo off
for /f "tokens=8 delims=\_" %%i in ('reg query "HKLM\system\currentcontrolset\services" ^| findstr OneSyncSvc_ ') do set "LUID=%%i"
if "%LUID%"=="" ( ping baidu.com&pause&exit)
reg add "HKLM\SYSTEM\ControlSet001\Services\OneSyncSvc_%LUID%" /v "Start" /t REG_DWORD /d 4 /f
说明:
| 为管道符号,其作用为传输。连接两个或者多个命令,并从左往右依次传输命令的执行结果,比如:command1 | command2 ,管道 | 的功能就是把第一个命令command1执行结果作为输入参数传递给command2。
转义符^是用在特殊符号之前,起到取消特殊字符的作用。
findstr或find是查找命令, findstr OneSyncSvc_就是只保留带OneSyncSvc_的结果。
文章来源:
网络小编D
版权声明:
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站立刻删除。