Batch file 如何批量获得PC正常运行时间?

Batch file 如何批量获得PC正常运行时间?,batch-file,Batch File,我这里有一个脚本,它会给我一个正常运行时间,但它不是正确的启动时间,我真的不知道错误在哪里,或者这是否是最好的方法,但这是我所拥有的。游戏结束后,我想将正常运行时间设置为一个变量,如果大于x,我将重新启动或提示用户重新启动,我将把这个脚本放在任务调度程序下。无论哪种方式,我都有。希望这足够了,我也不会因为一个愚蠢的问题而变得太糟糕 @echo off setlocal ENABLEEXTENSIONS call :Uptime d h n s echo/Uptime is: %d% days,

我这里有一个脚本,它会给我一个正常运行时间,但它不是正确的启动时间,我真的不知道错误在哪里,或者这是否是最好的方法,但这是我所拥有的。游戏结束后,我想将正常运行时间设置为一个变量,如果大于x,我将重新启动或提示用户重新启动,我将把这个脚本放在任务调度程序下。无论哪种方式,我都有。希望这足够了,我也不会因为一个愚蠢的问题而变得太糟糕

@echo off 
setlocal ENABLEEXTENSIONS
call :Uptime d h n s
echo/Uptime is: %d% days, %h% hours, %n% minutes, %s% seconds.
pause
goto :EOF

:Uptime days hours mins [secs]
setlocal ENABLEEXTENSIONS & set "c=net statistics work"
set t=2&if "%date%z" LSS "A" set t=1
for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('echo/^|date') do (
  for /f "tokens=%t%-4 delims=.-/ " %%d in ('date/t') do (
    set %%a=%%d&set %%b=%%e&set %%c=%%f))
for /f "tokens=5-8 delims=:. " %%a in ('echo/^|time') do (
  set "hh=%%a" & set "nn=%%b" & set "ss=%%c")
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
if 1%hh% LSS 20 set hh=0%hh%
set /a hh=100%hh%%%100,nn=100%nn%%%100,f=j*1440+hh*60+nn
for /f "tokens=3-8 delims=/:M " %%a in ('%c%^|findstr/b /c:"Stat"') do (
  set mm=%%a&set dd=%%b&set yy=%%c&set hh=%%d&set nn=%%e%%f)
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
if 1%hh% LSS 20 set hh=0%hh%
if {%nn:~2,1%} EQU {P} if "%hh%" NEQ "12" set hh=1%hh%&set/a hh-=88
if {%nn:~2,1%} EQU {A} if "%hh%" EQU "12" set hh=00
if {%nn:~2,1%} GEQ {A} set nn=%nn:~0,2%
set /a hh=100%hh%%%100,nn=100%nn%%%100,s=j*1440+hh*60+nn,n=f-s
set /a d=n/1440,n%%=1440,h=n/60,n%%=60
endlocal & set "%1=%d%" & set "%2=%h%" & set "%3=%n%" & (if "%4" NEQ "" set "%4=%ss%") & goto :EOF

尝试使用powershell创建批处理文件

@Echo Off&SetLocal
For /F "UseBackQ Tokens=1-4" %%A In (
    `Powershell "$OS=GWmi Win32_OperatingSystem;$UP=(Get-Date)-"^
    "($OS.ConvertToDateTime($OS.LastBootUpTime));$DO='d='+$UP.Days+"^
    "' h='+$UP.Hours+' n='+$UP.Minutes+' s='+$UP.Seconds;Echo $DO"`) Do (
    Set "%%A"&Set "%%B"&Set "%%C"&Set "%%D")
Echo(Uptime is: %d% days, %h% hours, %n% minutes, %s% seconds.
>Nul Timeout -1&Exit/B

好吧,这真的很简单,但我得到了一个错误:当我使用systeminfo | find“System Boot Time”时,类无效:“显然,我也不知道如何搜索,因为我输入了所有我能想到的与查找PC uptimenet stats srv | find“Statistics”相关的内容。”这是可行的,但并不是我真正想要的。虽然这非常有效,但我的电脑没有显示正常运行时间。请确保你正确复制了8行代码,并将它们粘贴到一个新的.cmd文件中。(特别注意在for循环括号内有正确的行数)。它不应该“拉起”你电脑上的任何东西,只输出一行。是的,它只有8行,每个括号就是你的方式,没有一个字符不合适。在powershell里有什么我需要做的吗?当运行时,它会告诉我我的用户名、域、所有关于我的处理器和我的PC品牌、平台等的信息……听起来你好像得到了$OS的所有信息的输出,从技术上讲,它是GWmi Win32_OperatingSystem。您收到报告的输出的事实表明,您与Powershell没有任何问题。您的问题肯定与文件中的代码有关。我直接从我在脚本目录中使用的工作脚本粘贴了它。希望我能添加一个我如何粘贴它的剪贴画,它正是您在这里的方式。我有时很健忘,但只要突出显示一些东西,然后按CTRL+C,然后按CTRL+V,我认为这是非常简单的。