在 Windows cmd 脚本中添加到 %TIME% 变量

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/301108/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-09 05:45:03  来源:igfitidea点击:

Adding to %TIME% variable in windows cmd script

windowsscriptingcmd

提问by PhiLho

I realize that this could probably be done easier in any number of other scripting languages but started to do it quick in cmd and now Im curious.

我意识到这可能可以在任何数量的其他脚本语言中更容易完成,但开始在 cmd 中快速完成,现在我很好奇。

Looking to start a process at an offset to the time that another process started. Lets say 5 minutes to keep it simple. Is there a way to add to the %TIME% variable?

希望在另一个进程启动的时间偏移处启动一个进程。让我们说 5 分钟以保持简单。有没有办法添加到 %TIME% 变量?

For instance:

例如:

start /b foo.exe
at %TIME% + 5 minutes bar.exe

Thanks for any assistance

感谢您的帮助

回答by PhiLho

I just typed set/?and discovered cmd is much better than old bat... :-)

我刚刚输入set/?并发现 cmd 比旧蝙蝠好得多...... :-)

set h=%TIME:~0,2%
set m=%TIME:~3,2%
set/a m2="m+5"
set t2=%h%:%m2%
set t2

Obviously, you can get 62 minutes, etc., I let you do the extra math... :-D

显然,你可以获得 62 分钟,等等,我让你做额外的数学...... :-D

回答by Rob Bos

Here is the extra math:

这是额外的数学:

:: Get an offset of 1 minute from the current time, accounting for edge cases
set hr=%TIME:~0,2%
set /a mn=%TIME:~3,2%+1
:: check minutes; greater than 60? add n/60 to hour, n%60 to mins
if %mn% geq 60 set /a hr=hr+mn/60 && set /a mn=mn%%60
if %hr% geq 24 set /a h=0
:: pad zeros if necessary
if %mn% leq 9 set mn=0%mn%
if %hr% leq 9 set hr=0%hr%

回答by Rob Bos

2 PhiLho

2 菲洛

thanks

谢谢

My bath code:

我的沐浴代码:

set h=%TIME:~0,2%
set m=%TIME:~3,2%
set s=%TIME:~6,2%
set time=%h%_%m%_%s%
mkdir c:\test\%time%
move c:\test\*.* c:\test\%time%
"C:\Program Files\WinRAR\RAR" a -ep c:\test\%time%\ -agDD-MM-YY_hh-mm-ss c:\test\%time%\*.* -zc:\arhiv\HEADERS.TXT
move c:\test\%time%\*.rar c:\arhiv\
rmdir c:\test\%time% /S /Q

回答by Yordan Georgiev

        @echo off
        :: START USAGE  ==================================================================
        ::SET THE NICETIME 
        :: SET NICETIME=BOO
        :: CALL GetNiceTime.cmd 

        :: ECHO NICETIME IS %NICETIME%

        :: echo nice time is %NICETIME%
        :: END USAGE  ==================================================================

        echo set hhmmsss
        :: this is Regional settings dependant so tweak this according your current settings
        for /f "tokens=1-3 delims=:" %%a in ('echo %time%') do set hhmmsss=%%a%%b%%c 
        ::DEBUG ECHO hhmmsss IS %hhmmsss%
        ::DEBUG PAUSE
        echo %yyyymmdd%
            :: this is Regional settings dependant so tweak this according your current settings
        for /f "tokens=1-3 delims=." %%D in ('echo %DATE%') do set  yyyymmdd=%%F%%E%%D
        ::DEBUG ECHO yyyymmdd IS %yyyymmdd%
        ::DEBUG PAUSE


        set NICETIME=%yyyymmdd%_%hhmmsss%
        ::DEBUG echo THE NICETIME IS %NICETIME%

        ::DEBUG PAUSE

回答by serega386

copy.cmd:

复制.cmd:

set hr=%TIME:~0,2%
if %hr% leq 9 set hr=0%hr:~1,1%
set mydate=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%-%hr%%TIME:~3,2%%TIME:~6,2%
copy file.txt file-%mydate%.txt
pause

回答by le luxe fou

Extended the "bath code" a little bit:

稍微扩展“沐浴代码”:

echo ----- time -----
echo %time%
set _hh=%time:~0,2%
set _mm=%time:~3,2%
set _ss=%time:~6,2%
set __time=%_hh%%_mm%%_ss%
echo _%__time%_
echo ----- time -----
echo:
echo ----- date -----
echo %date%
set _Y=%date:~0,4%
set _M=%date:~5,2%
set _D=%date:~8,2%
set __date=%_Y%%_M%%_D%
echo _%__date%_
echo ----- date -----
pause

Outputs 205146for %__time%

%__time%输出205146

Outputs 20180613for %__date%

%__date% 的输出20180613