我试图设置一个batch file来执行一组存储过程,并将输出转储到时间戳文本文件。 我在查找时间戳的正确格式时遇到问题。
这是我正在使用的
osql.exe -S <server> -E -Q "EXEC <stored procedure> " -o "c:\filename_%date:~-0,10%_%time:~-0,10%.txt"
我得到的错误是:
无法打开输出文件 – x:\ filename_Thu 06/25 / _16:26:43.1.txt没有这样的文件或目录
我无法find文档,我已经玩了,但无法find正确的格式。
:是不是在Windows上的文件名中的有效字符(与“\ / *?<>和|),我猜测%时间的扩展包含:分隔小时,分钟和秒。
在黑暗中刺可能会取代%时间:〜0,10%,如下所示:
%time:~0,2%_%time:~3,2%_%time:~6,2%
这假设%时间百分比总是在forms“hh:mm:ss.ss”,我认为这取决于你的语言环境(即我的语言环境使用一个,而不是一个从1/100秒分隔秒) 。 它应该给你像hh_mm_ss而不是hh:mm:ss。 如果你想要1/100秒的第一个数字(就像你在原来的例子中那样),你可以改变最后一个variables扩展来取代6,2的字符范围6,4。
所以,在第一眼我忽略了在文件名中也是无效的,你可能也想删除它们。 假设%date%的格式是“ddd DD / MM / yyyy”,你可以尝试类似的东西(我的语言环境不同于此,所以未经testing):
%date:~4,2%_%date:~7,2%_%date:~10,4%
为了testing所有这些,如果你还没有这样做,我build议打开cmd.exe,然后在那里input它。 “echo%time:〜0.2%等等。” find适合您的语言环境的东西。
最后,一个警告的话,这基本上假定一个特定的区域设置,它不太可能被移植到不同的语言环境。
我build议你使用一个更传统的date格式,这也使其易于sorting – yyyymmddhhmmss。 即根本不要使用分离器。 当你第一次看这样的格式时,看起来很难阅读,但是在大约2.5秒内就可以完成。
如果你想要date的通用格式试试这个。
for /F "skip=1 tokens=2-4 delims=(-)" %%A in ('echo ^| date') do for /F "Tokens=2-4 Delims=/ " %%X in ('date /t') do set %%A=%%X & set %%B=%%Y & set %%C=%%Z echo today is %dd%%mm%%yy%
这对于服务器使用不同date格式如mm / dd / yyyy或dd / mm / yyyy非常有用。这将始终确保您获取variablesmm中的月份,dd中的date和yy中的年份