我是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%
答案 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。