Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何从批处理文件中的字符串中查找作为数字的子字符串_Batch File - Fatal编程技术网

Batch file 如何从批处理文件中的字符串中查找作为数字的子字符串

Batch file 如何从批处理文件中的字符串中查找作为数字的子字符串,batch-file,Batch File,下面的代码有时工作正常,但有时显示错误。在MM案例中,以前我的输出是8,而不是08。但是现在我得到08作为一个字符串,错误为无效数字。数值常量为十进制(17), 十六进制(0x11)或八进制(021) Windows命令解释器使用值为0的C/C++函数作为第三个函数参数base。这意味着任何以0开头的数字字符串都被解释为八进制数08和09是无效的八进制数字,因为八进制系统只有数字0到7 解决方案不是使用算术表达式,而是使用字符串替换: @echo off setlocal EnableExten

下面的代码有时工作正常,但有时显示错误。在MM案例中,以前我的输出是8,而不是08。但是现在我得到08作为一个字符串,错误为无效数字。数值常量为十进制(17), 十六进制(0x11)或八进制(021)


Windows命令解释器使用值为
0
的C/C++函数作为第三个函数参数
base
。这意味着任何以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
被分配给环境变量
MyDate
,因为
tokens=2 delims==。
FOR命令行之后,接下来的3个命令行使用字符串替换而不是算术表达式进一步处理该变量,这对删除前导零没有帮助

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • echo/?
  • 获取/?
  • 如果/?
  • 设置/?
  • wmic/?
  • wmic操作系统/?
  • wmic操作系统获取/?
  • wmic操作系统获取localdatetime/?
这是克服这个问题的标准方法

相反,要获得两个字符的前导零填充版本,则为

设置/毫米+=100
设置“MM=%MM:~-2%”

现在我得到了,当设置/a MM=%MyDate:~4时,2%的结果是08,当时只有我得到了这个错误。但是我想要数字格式,如果结果是05,我只需要5。如果我的结果是11或10或12,我需要11或10或12分别。。。未来必须记住(我使用了Mofi答案的变体,并在过去明确检查前导零)。
 
 
LocalDateTime=20170824150309.315000+120
 
 
SET /a MM=1%MyDate:~4,2%-100

SET /a DD=1%MyDate:~6,2%-100