给出批处理文件的日期时间和动态路径
给出批处理文件的日期时间和动态路径
我创建了一个批处理文件
@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文件中处理日期有点棘手。
一个简单的解决方案是使用WMIC LocalTime
命令,该命令以一种方便的方式返回当前日期和时间,可以直接使用FOR
命令解析它。尝试类似于以下内容的命令:
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 我喜欢看到更多关于wmic
的灵活性的例子。它确实是Windows的瑞士军刀。
问题的原因是需要在批处理文件中添加日期时间,并且需要动态路径。
解决方法是使用批处理和JScript混合脚本来格式化时间戳,并将其保存在一个变量中。在批处理脚本中,使用for命令调用JScript脚本并将结果保存在变量ts中。然后,使用变量ts在命令中动态生成日志文件路径。JScript脚本使用Date对象来获取当前日期时间,并使用正则表达式来格式化时间戳。
以下是整理后的文章:
为了迎接挑战,这里有一个批处理和JScript混合脚本,可以按照你的要求格式化时间戳。将代码保存为.bat扩展名的文件。
()==() /* (batch + jscript hybrid script init)
:: *** Batch script *****
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是这类问题的专家。)
问题的出现原因是需要在批处理文件中获取当前日期和时间,并将其用作动态路径的一部分。解决方法是使用WMIC命令来获取操作系统的本地日期和时间,并使用子字符串操作提取所需的日期和时间格式。
以下是解决方法的代码示例:
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"
这段代码首先将ts变量设置为空。然后,使用WMIC命令获取操作系统的本地日期和时间,并将结果存储在变量ts中。最后,将ts变量的子字符串用于动态路径中的日期和时间部分。
另一种更简洁的方法是将WMIC命令的输出格式设置为列表,这样就不需要检查ts变量是否未定义。以下是使用列表格式的代码示例:
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set "ts=%%I"
无论使用哪种方法,WMIC命令都是获取操作系统本地日期和时间的优秀工具。