Batch file 在Bat文件和动态路径上给出日期时间
我已经创建了BAT文件Batch file 在Bat文件和动态路径上给出日期时间,batch-file,ssis,Batch File,Ssis,我已经创建了BAT文件 @ECHO OFF "C:\Program Files\Microsoft SQL Server\100\DTS\Binn\dtexec.exe" /FILE "D:\New folder (2)\xslttosql\SSIS-BSMS\SSIS-BSMS\SSIS-BSMS\Package6.dtsx" /REP P >> "D:\TRX_Value.log" exit 但是我想让D:\TRX_Value.log路径动态更改的输出,并给出文件名的时间信息
@ECHO OFF
"C:\Program Files\Microsoft SQL Server\100\DTS\Binn\dtexec.exe" /FILE "D:\New folder (2)\xslttosql\SSIS-BSMS\SSIS-BSMS\SSIS-BSMS\Package6.dtsx" /REP P >> "D:\TRX_Value.log"
exit
但是我想让D:\TRX_Value.log路径动态更改的输出,并给出文件名的时间信息,如D:\TRX_Value-20130307-144650.log,意思是2012/03/07 14:46:50
那有可能吗?我应该写什么样的脚本?在BAT文件中处理日期有点棘手 一个简单的解决方案是使用wmiclocaltime命令,该命令以一种方便的方式返回当前日期和时间,并使用FOR命令直接解析它。尝试类似的方法:
@ECHO OFF
FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
SET /A DT=%%F*10000+%%D*100+%%A
SET /A TM=%%B*100+%%C
SET FDT=%DT%-%TM%
)
ECHO "c:\progs\dtexec" /FILE "d:\fldr\pack.dtsx" /REP P "d:\logs\tr%FDT%.log"
检查结果并更正执行行以符合您的需求,因为我喜欢挑战,这里有一个批处理脚本/JScript混合脚本,它将按您想要的方式格式化时间戳。使用.bat扩展名保存此文件
@if (@X)==(@Y) @end /* (batch + jscript hybrid script init)
:: *** Batch script *****
@echo off
setlocal
for /f %%I in ('cscript /nologo /e:jscript "%~f0"') do set "ts=%%I"
"C:\Program Files\Microsoft SQL Server\100\DTS\Binn\dtexec.exe" /FILE "D:\New folder (2)\xslttosql\SSIS-BSMS\SSIS-BSMS\SSIS-BSMS\Package6.dtsx" /REP P >> "D:\TRX_Value-%ts%.log"
exit /b
:: *** JScript script *****/
var d = new Date();
WScript.echo(d.getFullYear() + /\d{2}$/.exec('0' + (d.getMonth() + 1)) + /\d{2}$/.exec('0' + d.getDate()) + '-'
+ /\d{2}$/.exec('0' + d.getHours()) + /\d{2}$/.exec('0' + d.getMinutes()) + /\d{2}$/.exec('0' + d.getSeconds()));
dbenham是这方面的大师。Echo将日期和时间转换为两个临时文件,然后将它们解析为正确的格式,并在命令中使用它们
@ECHO OFF
Set CURRDATE=%TEMP%\CURRDATE.TMP
ECHO %DATE% > %CURRDATE%
Set CURRTIME=%TEMP%\CURRTIME.TMP
ECHO %TIME% > %CURRTIME%
Set PARSEDATEARG="eol=; tokens=1,2,3,4* delims=/, "
Set PARSETIMEARG="eol=; tokens=1,2,3,4,5* delims=:,., "
For /F %PARSEDATEARG% %%i in (%CURRDATE%) Do SET YYYYMMDD=%%k%%j%%i
For /F %PARSETIMEARG% %%i in (%CURRTIME%) Do SET HHMMSS=%%i%%j%%k
"C:\Program Files\Microsoft SQL Server\100\DTS\Binn\dtexec.exe" /FILE "D:\New folder (2)\xslttosql\SSIS-BSMS\SSIS-BSMS\SSIS-BSMS\Package6.dtsx" /REP P >> "D:\TRX_Value-%YYYYMMDD%-%HHMMSS%.log" exit
我喜欢PA关于使用WMIC的建议,但有一个更简单的WMIC实现 OS别名的localDateTime属性的格式与您想要的格式几乎完全相同: YYMMDDhhmmss.ffffff-zzz 其中ffffff是分数秒,zzz是时区信息。简单的子字符串操作提供所需的日期和时间格式
@echo off
setlocal
set "ts="
for /f "skip=1" %%A in ('wmic os get localDateTime') do if not defined ts set "ts=%%A"
... your exe call ... >>"D:\TRX_Value-%ts:~0,8%-%ts:~8,6%.log"
PowerShell是一个选项吗?-比其他任何事情都容易。JavaScript呢?我对BAT脚本不熟悉,powershell呢?它看起来像命令提示符?请检查这个答案-@AlexeiLevenkov thx you:这假设%date%的格式是MM/DD/YYYY。根据用户的区域设置,这可能不起作用。@rojo它实际上假定DD/MM/yyyyy是我在英国,但这一点很好。需要将相关行交换到%CURRDATE%中的For/F%PARSEDATEARG%%i,设置yyyyymmdd=%%k%%i%%j,交换我假定的输出中的i和j变量。+1我喜欢看到更多wmic灵活性的示例。这真是瑞士军刀的窗户。真漂亮!但是,如果将wmic的输出格式化为列表,则不必确保%ts%未设置或检查是否未定义。对于“wmic os get localdatetime/format:list”中的/f tokens=2 delims==%%I,do set ts=%%I在任何情况下,wmic os get localdatetime都是一个极好的发现!