.bat文件中的动态变量,用于根据当前日期创建日志

时间:2015-07-13 02:06:58

标签: batch-file

我是SAS程序用户,我编写了以下.bat文件以进行任务调度。我想导出一个文件名为%date%_log.log的日志文件。因为我刚开始编写.bat脚本(我希望日期格式为ddmmmyyyy)

为了创建一个环境变量,我想我可以做以下

@echo off   
set ddmmyyyy=%date:=~4, 2%%date:=~7, 2%%date:=~10, 4%
set logfile= "C:\log\log_%ddmmyyyy%.log"

虽然我不知道如何将它放在-Log语句中。另外,我更喜欢ddmmmyyyy格式而不是ddmmyyyy格式。

REM Reference
    REM commands split over multiple lines ^ 
    REM Commends in .bat file REM

"C:\Program Files\SASHome\SASFoundation\9.3\sas.exe"^
 -CONFIG "C:\sasv9.cfg"^
 -AUTOEXEC "C:\AUTOEXEC.sas"^
 -SYSIN "C:\script.sas"^
 -LOG %logfile%

1 个答案:

答案 0 :(得分:2)

使用日期是Windows批处理的一个难点。您对%DATE%的使用是不可靠的,因为它是特定于语言环境的。即使在英语世界中,不同的Windows机器也使用各种格式。因此,在您的计算机上运行的批处理脚本可能无法在另一台计算机上运行。

您可以使用WMIC OS GET LOCALDATETIME以YYYYMMDDhhmmss.ssssss-zzz格式可靠地获取时间戳。您可以使用查找值将月份数转换为月份缩写。

例如:

<pre>

但我有一个更简单的建议。您可以使用我的GetTimestamp.bat实用程序。它是纯脚本(混合JScript /批处理),可以在XP之后的任何Windows机器上本机运行。您的解决方案可以像

一样简单
@echo off
setlocal enableDelayedExpansion
set "months= 01:Jan 02:Feb 03:Mar 04:Apr 05:May 06:Jun 07:Jul 08:Aug 09:Sep 10:Oct 11:Nov 12:Dec"
set "ts="
for /f "skip=1 delims=" %%A in ('wmic os get localdatetime') do if not defined ts set "ts=%%A"
set "yyyy=%ts:~0,4%"
set "mm=%ts:~4,2%"
set "dd=%ts:~6,2%"
for /f %%A in ("!months:*%mm%:=!") do set "mon=%%A"
set "logfile=C:\log\log_%dd%%mon%%yyyy%.log"

"C:\Program Files\SASHome\SASFoundation\9.3\sas.exe"^
 -CONFIG "C:\sasv9.cfg"^
 -AUTOEXEC "C:\AUTOEXEC.sas"^
 -SYSIN "C:\script.sas"^
 -LOG %logfile%

注意 - 我个人不喜欢DDMMMYYYY用于文件名,因为它没有按时间顺序排序。我更喜欢YYYYMMDD或YYYY-MM-DD。