在蝙蝠文件上给出日期时间&动态路径

时间:2013-03-07 07:47:36

标签: batch-file ssis

I Hae创建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路径动态更改的输出,并提供文件名的时间信息,例如D:\TRX_Value-20130307-144650.log,这意味着2012/03/07 14:46:50

有可能吗?我应该写什么样的剧本?

4 个答案:

答案 0 :(得分:3)

在BAT文件中处理日期有点棘手。

一个简单的解决方案是使用 WMIC LocalTime 命令,该命令以方便的方式返回当前日期和时间,以便使用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"

检查结果并更正执行行以适合您的要求

答案 1 :(得分:2)

我喜欢PA建议使用WMIC,但有一个更简单的WMIC实现。

操作系统别名的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"

答案 2 :(得分:1)

仅仅因为我喜欢挑战,这里是一个批处理脚本/ 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是这类人的主人。)

答案 3 :(得分:1)

Echo将日期和时间分成2个临时文件,然后将它们解析为正确的格式,并在命令中使用它们。

@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