如何从批处理文件中的字符串中找到子字符串
下面的代码有些时间工作正常,但有些时间显示错误。在MM情况下,以前我的输出是8而不是08.但现在我得到08作为字符串,错误无效的数字。数字常量是十进制(17), 十六进制(0x11)或八进制(021)。如何从批处理文件中的字符串中找到子字符串
echo off
CD /d C:\Windows\System32\wbem\
FOR /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x
SET /a YYYY=%MyDate:~0,4%
SET /a MM=%MyDate:~4,2%
SET /a DD=%MyDate:~6,2%
echo %YYYY%
echo %MM%
echo %DD%
Windows命令解释器使用的C/C++函数strtol与第三功能参数base
值0
。这意味着任何以0开头的数字字符串被解释为八进制数字。 08
和09
不是有效的八进制数为八进制系统仅具有数字0到7
的溶液并不使用算术表达式,而是只使用字符串替换:
@echo off
setlocal EnableExtensions
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "MyDate=%%I"
set "Year=%MyDate:~0,4%"
if "%MyDate:~4,1%" == "0" (set "Month=%MyDate:~5,1%") else set "Month=%MyDate:~4,2%"
if "%MyDate:~6,1%" == "0" (set "Day=%MyDate:~7,1%") else set "Day=%MyDate:~6,2%"
echo Year: %Year%
echo Month: %Month%
echo Day: %Day%
endlocal
这批代码输出:
Year: 2017
Month: 8
Day: 24
使用WMIC命令的UTF-16小字节序编码的输出是:
LocalDateTime=20170824150309.315000+120
只有20170824150309
被分配到环境中,因为tokens=2 delims==.
这是由后只使用字符串替换,未来3个通过命令行命令行,而不是算术表达式在这里是没有帮助去除前导零进一步处理的变量MyDate
。
为了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
echo /?
for /?
if /?
set /?
wmic /?
wmic os /?
wmic os get /?
wmic os get localdatetime /?
SET /a MM=1%MyDate:~4,2%-100
SET /a DD=1%MyDate:~6,2%-100
是克服该问题的标准方法。
反向,从而获得2个字符的前导零填充的版本,是
集/一个MM + = 100 组 “MM =%MM:〜-2%”
+1处理这个问题的简便方法... _必须记住未来_(我已经使用了Mofi答案的变体,并且明确地检查了过去的前导零)。 – TripeHound
现在,我得到,当SET /一个MM =%MyDate时:〜4,2%的结果是08那个时候才得到这个错误。 –
但我想要数字格式,如果结果是05我只需要5.如果我的结果是11或10或12那时我需要11或10或12分别。 –