批处理获取当前时间
时间:2013-01-06 23:55:16浏览:4680
%date:~4,4% 取年
%date:~9,2% 取月
%date:~12,2% 取日
%time:~0,2% 小时
%time:~3,2% 分钟
%time:~6,2% 秒
如:
rem 取系统日期及时间,同时将时间转换为8位(8:16:00-->08:16:00).
set CurDate=%date:~0,10%
set CurTime=%time%
set hh=%CurTime:~0,2%
if /i %hh% LSS 10 ( set hh=0%CurTime:~1,1% )
set mm=%CurTime:~3,2%
set ss=%CurTime:~6,2%
set CurDateTime=%CurDate%_%hh%:%mm%:%ss%
set CurDateTime
语法:
%变量:~指定偏移量,指定截取字符长度%
如果两者的数值(偏移量或长度)是负数,使用的数字将会是环境变数的长度加上位移或指定长度。我会修正上面帖子中的描述。这里举个例子来说明:
set /p ok=Input value of "ok" environment-variable:_
C:Documents and Settingsgnaw0725>set /p ok=Input value of "ok" environment-var
iable:_
Input value of "ok" environment-variable:_1234567890
C:Documents and Settingsgnaw0725>echo %ok%
1234567890
C:Documents and Settingsgnaw0725>echo %ok:~4,4%
5678
C:Documents and Settingsgnaw0725>echo %ok:~-4,4%
7890
C:Documents and Settingsgnaw0725>echo %ok:~4,-4%
56
C:Documents and Settingsgnaw0725>echo %ok:~-4,-4%
ECHO is on.
C:Documents and Settingsgnaw0725>echo %ok:~,-4%
123456
C:Documents and Settingsgnaw0725>echo %ok:~-4%
7890
C:Documents and Settingsgnaw0725>echo %ok:~4,%
ECHO is on.
SET扩展命令集有些特殊用法,例如:
%CD% - 展开为含目前目录的字串。(注:这个扩展功能较之For中的%~$PATH:I的用法要弱的多了)
%RANDOM% - 展开为一个在 0 和 32767 之间的整数乱数值。
%ERRORLEVEL% - 展开为目前的 ERRORLEVEL 值
%CMDEXTVERSION% - 展开为目前的扩充指令处理器的版本号码。
%CMDCMDLINE% - 展开为执行指令处理器前的原始指令行。
这些用法有待以后脚本运用中的实践。SET扩展命令集的帮助信息如下:
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:Documents and Settingsgnaw0725>set /?
显示、设定或移除 cmd.exe 环境变数。
SET [variable=[string]]
variable 指定环境变数名称。
string 指定设定给变数的一系列字元。
仅键入 SET 而不加上任何参数,可以显示目前的环境变数。
如果您啟用了扩充命令,SET 指令有以下的改变:
如果执行 SET 命令而且只包含变数名称,没有等号或数值的话,指令会显示出所有字首符合 SET 命令中指定变数名称的所有变数
值。例如:
SET P
会列出所有以 'P' 为开头的环境变数。
如果在目前的环境中找不到变数名称,SET 指令会将 ERRORLEVEL设为 1。
SET 指令不将等号 (=) 视为变数名称的一部份。
有两个新参数已经加到 SET 指令中:
SET /A e-xpression
SET /P variable=[promptString]
/A 指定在等号右方的字串是一个要被运算的数字运算式。您可以用运算式进行简单的运算,而且支援下列的运算子 (依照运算优先顺序由高到低排列):
() - 组成一群
* / % - 数字运算元
+ - - 数字运算元
<< >> - 逻辑位移
& - 位元运算 and
^ - 位元运算 exclusive or
| - 位元运算 or
= *= /= %= += -= - 指定
&= ^= |= <<= >>=
, - 运算式分隔字元
如果您使用了任何逻辑或餘数运算子,您必须将运算式两边括上引号。任何在运算式中非数字的字串会被当作环境变数,并且在使用前会先将这些环境变数转换为数字。如果您所指定的环境变数名称尚未在目前环境中定义,那麼它的值会被设为 0。这可以让您用环境变数值来做运算,而不必打入所有的 % 符号来取得它的值。如果 SET /A 是用指令档之外的指令行执行,它会显示运算式最后的数值。指定运算子需要有个环境变数在等号的左方。0x 字首在数字前方代表十六进位数字、0b 字首代表二进位数字或 0 字首代表八进位数字,否则数字值都是指十进位数字。所以 0x12 就和 18、022 等相同。请注意八进位数字可能容易弄错: 像 08 和 09 就不是正确的数字,因为 8 和 9 并不是八进位的正确数字。
/P 参数让您设定指令行的使用者输入变数值。在读取输入指令行之前,显示指定的 promptString。promptString 可以是空白。
环境变数取代功能已经有下列增强:
%PATH:str1=str2%
会将 PATH 环境变数展开,取代每个发现的 "str1" 与 "str2"的扩充结果。"str2" 可以是空白字串,这会从扩充输出中删除全部 "str1"。"str1" 可以用星号开始,这将会从扩充输出的开头开始,对应到从所有第一个发现含有str1 的项目。
您也可以为扩充功能指定子字串。
%PATH:~10,5%
这将会扩充 PATH 环境变数,然后只使用扩充结果的第 11 个(位移 10)字元后的 5 个字元如果长度未指定,将会预设为上次使用的变数值。如果数字(位或长度)是负数,使用的数字将会是环境变数的长度加上位移或指定长度。
%PATH:~-10%
将抽出 PATH 变数的最后 10 个字元。
%PATH:~0,-2%
将抽出 PATH 变数的最后 2 个字元。
最后,系统加入了延迟环境变数展开的支援。在预设状态下,指令展开会啟用这项支援,但是您可以在 CMD.EXE 用 /V 指令行参数来啟用/停用这个功能。 请参看 CMD /?
延迟环境变数展开功能可用来避开展开功能限制。这项限制是发生在指令行读取过程,不是发生在执行过程。下面的范例说明了立即展开变数时会发生的问题:
set VAR=before
if "%VAR%" == "before" (
set VAR=after;
if "%VAR%" == "after" @echo If you see this, it worked
)
这个例子永远无法显示 echo 讯息,因为在两个 IF 叙述中的 %VAR% 会在第一个 IF 叙述被读入时便被展开。这是因为它是逻辑上包含了 IF 的内部,而内部又是一个复合叙述。 所以在复合叙述内的 IF 实际上是用"before" 和 "after" 来比较,而这永远不会为真。同样的,下面的例子也不会作用:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
这个例子中并不会建立目前目录中所有档案的清单,相反的只会将 LIST 变数设为最后一个找到的档案。同样地,这是因为 %LIST% 只有在 FOR 叙述第一次被读入时才展开,此时 LIST 变数是空的。所以我们实际执行的 FOR迴圈是:
for %i in (*) do set LIST= %i
这只是重复的将 LIST 设为最后找到的档案。
延迟环境变数展开让您可以用一个不同的字元 (惊嘆号) 在执行时展开环境变数。如果啟用了延迟环境变数展开,上面的例子可以被改写如下而正常作用:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
如果您啟用了扩充指令,有几个动态环境变数会被展开但是不会出现在 SET所显示的环境变数列表中。这些变数的值会每次在这些变数被展开时动态地重新计算如果使用者用这些变数的名称来定义变数时,则这个新定义会覆盖以下所列的动态变数:
%CD% - 展开为含目前目录的字串。
%DATE% - 展开为与 DATE 命令格式相同的目前日期字串。
%TIME% - 展开为与 TIME 命令格式相同的目前时间字串。
%RANDOM% - 展开为一个在 0 和 32767 之间的整数乱数值。
%ERRORLEVEL% - 展开为目前的 ERRORLEVEL 值
%CMDEXTVERSION% - 展开为目前的扩充指令处理器的版本号码。
%CMDCMDLINE% - 展开为执行指令处理器前的原始指令行。
rem CODE BY t0nsha
rem 关于提取date,time输出结果的一个批处理
rem “:”(冒号)和“~”波浪号必不可少!
rem “~”后的数字:为正数表示舍弃输出结果的前几位;直接跟负数表示取到输出结果的后第几位。
rem “,”后的数字:为正数表示取到输出结果的前第几位;为负数表示舍弃输出结果的后几位。
echo %date%
echo %date:~4%
::下行表示舍弃前0位,取到第10位(即取输出结果的前10位)
echo %date:~0,10%
echo %date:~4,-5%
pause
echo %time%
echo %time:~-3%
echo %time:~2,-3%
pause
echo %date:~4% %time:~0,-3%
pause
BTW
使用批处理产生日期(时间)文件、文件夹 帮别人整Sql server自动备份
发现无法使用网络映射驱动器作为备份文件存放路径
而本机磁盘空间实在是不够
于是决定在本机只备份最新2天数据
再写个批处理,做成系统调度
每周将备份数据复制到网络驱动器上存档
从网上搜到批处理产生日期文件的办法
下面是实现的比较好的
批处理文件:
@echo off
set aFile=bak-%DATE:~4,4%%DATE:~9,2%%DATE:~12,2%
set bFile=bak-%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
set cFile=bak-%DATE%
echo Afile=%aFile%
echo Bfile=%bFile%
echo Cfile=%cFile%
输出:
Afile=bak-20061219
Bfile=bak-113202
Cfile=bak-星期二 2006-12-19
于是备份bat就好写了
@echo off
echo 正在备份数据到网络驱动器。。。
set folder=%DATE%
md "y:\%folder%"
copy d:DataBak*.BAK "y:\%folder%"
echo 备份完毕。
------------------------------------------------------------------------------------------------------
@echo off
set AFile=bak-%DATE:~4,4%%DATE:~9,2%%DATE:~12,2%
set BFile=bak-%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
echo AFile=%AFile%.rar
echo BFile=%BFile%.rar
运行此批处理的结果:
AFile=bak-20060109.rar ------- 年月日 -- 8位
BFile=bak-140650.rar ---------- 时分秒 -- 6位
另:如果小时数只有一位数字,造成中间有空格而出错的问题,请使用如下方法补0
set hh=%time:~0,2%
if /i %hh% LSS 10 (set hh=0%time:~1,1%)
______________________________________________________________________
以下是修改文件名为当前系统时间代码:
for /f "delims=" %%a in ('dir/b/a-d') do (
if not "%%~nxa"=="%~nx0" (
ren "%%a" "%%~na%date:~4,4%%date:~4,4%%date:~9,2%%time:~0,2%%time:~3,2%%%~xa"
))
上一篇:JS漂浮广告代码
下一篇:看图理解:普通交互方式和Ajax交互方式区别
%date:~9,2% 取月
%date:~12,2% 取日
%time:~0,2% 小时
%time:~3,2% 分钟
%time:~6,2% 秒
如:
rem 取系统日期及时间,同时将时间转换为8位(8:16:00-->08:16:00).
set CurDate=%date:~0,10%
set CurTime=%time%
set hh=%CurTime:~0,2%
if /i %hh% LSS 10 ( set hh=0%CurTime:~1,1% )
set mm=%CurTime:~3,2%
set ss=%CurTime:~6,2%
set CurDateTime=%CurDate%_%hh%:%mm%:%ss%
set CurDateTime
语法:
%变量:~指定偏移量,指定截取字符长度%
如果两者的数值(偏移量或长度)是负数,使用的数字将会是环境变数的长度加上位移或指定长度。我会修正上面帖子中的描述。这里举个例子来说明:
set /p ok=Input value of "ok" environment-variable:_
C:Documents and Settingsgnaw0725>set /p ok=Input value of "ok" environment-var
iable:_
Input value of "ok" environment-variable:_1234567890
C:Documents and Settingsgnaw0725>echo %ok%
1234567890
C:Documents and Settingsgnaw0725>echo %ok:~4,4%
5678
C:Documents and Settingsgnaw0725>echo %ok:~-4,4%
7890
C:Documents and Settingsgnaw0725>echo %ok:~4,-4%
56
C:Documents and Settingsgnaw0725>echo %ok:~-4,-4%
ECHO is on.
C:Documents and Settingsgnaw0725>echo %ok:~,-4%
123456
C:Documents and Settingsgnaw0725>echo %ok:~-4%
7890
C:Documents and Settingsgnaw0725>echo %ok:~4,%
ECHO is on.
SET扩展命令集有些特殊用法,例如:
%CD% - 展开为含目前目录的字串。(注:这个扩展功能较之For中的%~$PATH:I的用法要弱的多了)
%RANDOM% - 展开为一个在 0 和 32767 之间的整数乱数值。
%ERRORLEVEL% - 展开为目前的 ERRORLEVEL 值
%CMDEXTVERSION% - 展开为目前的扩充指令处理器的版本号码。
%CMDCMDLINE% - 展开为执行指令处理器前的原始指令行。
这些用法有待以后脚本运用中的实践。SET扩展命令集的帮助信息如下:
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:Documents and Settingsgnaw0725>set /?
显示、设定或移除 cmd.exe 环境变数。
SET [variable=[string]]
variable 指定环境变数名称。
string 指定设定给变数的一系列字元。
仅键入 SET 而不加上任何参数,可以显示目前的环境变数。
如果您啟用了扩充命令,SET 指令有以下的改变:
如果执行 SET 命令而且只包含变数名称,没有等号或数值的话,指令会显示出所有字首符合 SET 命令中指定变数名称的所有变数
值。例如:
SET P
会列出所有以 'P' 为开头的环境变数。
如果在目前的环境中找不到变数名称,SET 指令会将 ERRORLEVEL设为 1。
SET 指令不将等号 (=) 视为变数名称的一部份。
有两个新参数已经加到 SET 指令中:
SET /A e-xpression
SET /P variable=[promptString]
/A 指定在等号右方的字串是一个要被运算的数字运算式。您可以用运算式进行简单的运算,而且支援下列的运算子 (依照运算优先顺序由高到低排列):
() - 组成一群
* / % - 数字运算元
+ - - 数字运算元
<< >> - 逻辑位移
& - 位元运算 and
^ - 位元运算 exclusive or
| - 位元运算 or
= *= /= %= += -= - 指定
&= ^= |= <<= >>=
, - 运算式分隔字元
如果您使用了任何逻辑或餘数运算子,您必须将运算式两边括上引号。任何在运算式中非数字的字串会被当作环境变数,并且在使用前会先将这些环境变数转换为数字。如果您所指定的环境变数名称尚未在目前环境中定义,那麼它的值会被设为 0。这可以让您用环境变数值来做运算,而不必打入所有的 % 符号来取得它的值。如果 SET /A 是用指令档之外的指令行执行,它会显示运算式最后的数值。指定运算子需要有个环境变数在等号的左方。0x 字首在数字前方代表十六进位数字、0b 字首代表二进位数字或 0 字首代表八进位数字,否则数字值都是指十进位数字。所以 0x12 就和 18、022 等相同。请注意八进位数字可能容易弄错: 像 08 和 09 就不是正确的数字,因为 8 和 9 并不是八进位的正确数字。
/P 参数让您设定指令行的使用者输入变数值。在读取输入指令行之前,显示指定的 promptString。promptString 可以是空白。
环境变数取代功能已经有下列增强:
%PATH:str1=str2%
会将 PATH 环境变数展开,取代每个发现的 "str1" 与 "str2"的扩充结果。"str2" 可以是空白字串,这会从扩充输出中删除全部 "str1"。"str1" 可以用星号开始,这将会从扩充输出的开头开始,对应到从所有第一个发现含有str1 的项目。
您也可以为扩充功能指定子字串。
%PATH:~10,5%
这将会扩充 PATH 环境变数,然后只使用扩充结果的第 11 个(位移 10)字元后的 5 个字元如果长度未指定,将会预设为上次使用的变数值。如果数字(位或长度)是负数,使用的数字将会是环境变数的长度加上位移或指定长度。
%PATH:~-10%
将抽出 PATH 变数的最后 10 个字元。
%PATH:~0,-2%
将抽出 PATH 变数的最后 2 个字元。
最后,系统加入了延迟环境变数展开的支援。在预设状态下,指令展开会啟用这项支援,但是您可以在 CMD.EXE 用 /V 指令行参数来啟用/停用这个功能。 请参看 CMD /?
延迟环境变数展开功能可用来避开展开功能限制。这项限制是发生在指令行读取过程,不是发生在执行过程。下面的范例说明了立即展开变数时会发生的问题:
set VAR=before
if "%VAR%" == "before" (
set VAR=after;
if "%VAR%" == "after" @echo If you see this, it worked
)
这个例子永远无法显示 echo 讯息,因为在两个 IF 叙述中的 %VAR% 会在第一个 IF 叙述被读入时便被展开。这是因为它是逻辑上包含了 IF 的内部,而内部又是一个复合叙述。 所以在复合叙述内的 IF 实际上是用"before" 和 "after" 来比较,而这永远不会为真。同样的,下面的例子也不会作用:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
这个例子中并不会建立目前目录中所有档案的清单,相反的只会将 LIST 变数设为最后一个找到的档案。同样地,这是因为 %LIST% 只有在 FOR 叙述第一次被读入时才展开,此时 LIST 变数是空的。所以我们实际执行的 FOR迴圈是:
for %i in (*) do set LIST= %i
这只是重复的将 LIST 设为最后找到的档案。
延迟环境变数展开让您可以用一个不同的字元 (惊嘆号) 在执行时展开环境变数。如果啟用了延迟环境变数展开,上面的例子可以被改写如下而正常作用:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
如果您啟用了扩充指令,有几个动态环境变数会被展开但是不会出现在 SET所显示的环境变数列表中。这些变数的值会每次在这些变数被展开时动态地重新计算如果使用者用这些变数的名称来定义变数时,则这个新定义会覆盖以下所列的动态变数:
%CD% - 展开为含目前目录的字串。
%DATE% - 展开为与 DATE 命令格式相同的目前日期字串。
%TIME% - 展开为与 TIME 命令格式相同的目前时间字串。
%RANDOM% - 展开为一个在 0 和 32767 之间的整数乱数值。
%ERRORLEVEL% - 展开为目前的 ERRORLEVEL 值
%CMDEXTVERSION% - 展开为目前的扩充指令处理器的版本号码。
%CMDCMDLINE% - 展开为执行指令处理器前的原始指令行。
rem CODE BY t0nsha
rem 关于提取date,time输出结果的一个批处理
rem “:”(冒号)和“~”波浪号必不可少!
rem “~”后的数字:为正数表示舍弃输出结果的前几位;直接跟负数表示取到输出结果的后第几位。
rem “,”后的数字:为正数表示取到输出结果的前第几位;为负数表示舍弃输出结果的后几位。
echo %date%
echo %date:~4%
::下行表示舍弃前0位,取到第10位(即取输出结果的前10位)
echo %date:~0,10%
echo %date:~4,-5%
pause
echo %time%
echo %time:~-3%
echo %time:~2,-3%
pause
echo %date:~4% %time:~0,-3%
pause
BTW
使用批处理产生日期(时间)文件、文件夹 帮别人整Sql server自动备份
发现无法使用网络映射驱动器作为备份文件存放路径
而本机磁盘空间实在是不够
于是决定在本机只备份最新2天数据
再写个批处理,做成系统调度
每周将备份数据复制到网络驱动器上存档
从网上搜到批处理产生日期文件的办法
下面是实现的比较好的
批处理文件:
@echo off
set aFile=bak-%DATE:~4,4%%DATE:~9,2%%DATE:~12,2%
set bFile=bak-%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
set cFile=bak-%DATE%
echo Afile=%aFile%
echo Bfile=%bFile%
echo Cfile=%cFile%
输出:
Afile=bak-20061219
Bfile=bak-113202
Cfile=bak-星期二 2006-12-19
于是备份bat就好写了
@echo off
echo 正在备份数据到网络驱动器。。。
set folder=%DATE%
md "y:\%folder%"
copy d:DataBak*.BAK "y:\%folder%"
echo 备份完毕。
------------------------------------------------------------------------------------------------------
@echo off
set AFile=bak-%DATE:~4,4%%DATE:~9,2%%DATE:~12,2%
set BFile=bak-%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
echo AFile=%AFile%.rar
echo BFile=%BFile%.rar
运行此批处理的结果:
AFile=bak-20060109.rar ------- 年月日 -- 8位
BFile=bak-140650.rar ---------- 时分秒 -- 6位
另:如果小时数只有一位数字,造成中间有空格而出错的问题,请使用如下方法补0
set hh=%time:~0,2%
if /i %hh% LSS 10 (set hh=0%time:~1,1%)
______________________________________________________________________
以下是修改文件名为当前系统时间代码:
for /f "delims=" %%a in ('dir/b/a-d') do (
if not "%%~nxa"=="%~nx0" (
ren "%%a" "%%~na%date:~4,4%%date:~4,4%%date:~9,2%%time:~0,2%%time:~3,2%%%~xa"
))
上一篇:JS漂浮广告代码
下一篇:看图理解:普通交互方式和Ajax交互方式区别
- Linux文章
- PHP文章
- 随机文章
- Linux中的find(-atime...
- mysql的expire_logs_...
- PHP 扩展 libsodium s...
- Linux下利用find和cp实现筛...
- 使用mysqldump命令导出备份m...
- Linux系统如何设置开机自动运行脚...
- Linux上实现秒级执行的定时任务
- shell echo -e 颜色输出
- Linux下通过grep查找指定的进...
- 解决执行脚本报syntax erro...
发表评论
昵称: 验证码: