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
Datetime 使用Windows批处理文件输出可排序的日期和时间字符串_Datetime_Batch File - Fatal编程技术网

Datetime 使用Windows批处理文件输出可排序的日期和时间字符串

Datetime 使用Windows批处理文件输出可排序的日期和时间字符串,datetime,batch-file,Datetime,Batch File,我已经经历了许多类似的问题,例如下面的问题,但无法获得有效的输出。我只需要字符串中的“YYYYMMDD hhmmss”。下面的工作立即准备好复制/粘贴到命令提示符中,您可以看到结果。我不知道为什么在最终输出中我的变量之间会有间隙/空格(我以为有尾随空格,但我尝试了各种技术来去除这些间隙/空格,但没有任何效果,从我看到的变量中没有尾随空格)。编辑:我不能使用PowerShell(如果可以,我会这样做,Gerhard在下面正确地建议了这一点,但我受到现有系统的限制,无法批量处理) 有人能建议如何创建

我已经经历了许多类似的问题,例如下面的问题,但无法获得有效的输出。我只需要字符串中的“YYYYMMDD hhmmss”。下面的工作立即准备好复制/粘贴到命令提示符中,您可以看到结果。我不知道为什么在最终输出中我的变量之间会有间隙/空格(我以为有尾随空格,但我尝试了各种技术来去除这些间隙/空格,但没有任何效果,从我看到的变量中没有尾随空格)。编辑:我不能使用PowerShell(如果可以,我会这样做,Gerhard在下面正确地建议了这一点,但我受到现有系统的限制,无法批量处理)

有人能建议如何创建“YYYYMMDD hhmmss”的预期字符串输出吗

预期结果:
20200716-100205

实际结果:
2020 07 16-10 02 05


这个答案已经被扩展了很多次,所以我删除了所有内容并给出了一个单一的解决方案

@
for /f "tokens=2 delims=.=" %%i in ('wmic os get localdatetime /format:list') do set result=%%i
echo %result%

我不想在系统上设置日期(但我想从系统中收集日期,并用它来填充变量)。我想将“YYYYMMDD hhmmss”收集到一个变量中,然后将该变量用于另一个任务(将其附加到日志文件名)。我发现我必须填充数字,因为它们通常是上面提到的单个数字。但是如果每个变量之间没有空格,我就无法输出最终的组合字符串。SET语句之前的for/f未正确从系统收集。我将在我的最终脚本中使用它。为了方便起见,我在上面放的是示例输出。使用
cmd
batch file
?我会将最终结果放入脚本中(因此将%替换为%%etc),但是的,这是cmd,而不是老式的DOS:)(这些将在Windows 2012服务器上运行,以便与cmd兼容)。使用空格的原因是:您将它们包括在内:
set Minute=%Minute:~-2%&&……
将%Minute%设置为
%Minute:~-2%
加上空格。写
set Minute=%Minute:~-2%&&&&&&&&&(
或最好使用安全语法:
set“Minute=%Minute:~-2%&&&&&&&&&&&&-/code>解决方案1:
for/F”令牌=1-6 delims=/:“%%I in(“%SystemRoot%\System32\roboccopy.exe”%SystemDrive%\\\\\\\\\\\\/NJH”)设置“yyyyymmddhmss=%I%%J%%K-%L M%%N”&转到HaveDateTime
,并在下一行显示
:HaveDateTime
。解决方案2:
for/F”tokens=2 delims==。“%%I in(“%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime/VALUE”)在下一行设置“yyyymmddhhmmss=%%I”
设置“yyyymmddhhmmss=%yyyymmddhhmmss:~0,8%-%yyyymmddhhmmss:~8,6%”。这两种解决方案在我的回答中都有详细的解释。注意:
wmic path win32\u localtime
不提供前导零(非常适合做数学运算,但不适合构建日期/时间字符串)。更好地使用不幸的是,我不能使用PowerShell(我在所有Windows工作中使用的首选语言),因为我必须维护旧的生产脚本(我非常不喜欢使用批处理)。但是填充仍然不起作用,你有解决办法吗?i、 e.刚才脚本的输出是“2020719-95759”,这是不可排序的(月“7”必须是“07”,小时“9”必须是“09”才能排序)。好的,这很简单,只需测试一个月,看看它是否小于或等于9,如果是,则添加一个0。请参见编辑。我将在答案中留下
powershell
部分,因为这可能对未来的读者有所帮助。是的。请参见
如果/?
您可以使用各种条件。放弃所有这些,我更改了答案。
@
for /f "tokens=2 delims=.=" %%i in ('wmic os get localdatetime /format:list') do set result=%%i
echo %result%