我正在尝试设置一个批处理文件来执行一组存储的过程并将输出转储到带时间戳的文本文件中。我在查找时间戳的正确格式时遇到问题。
这是我正在使用的
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 没有这样的文件或目录
我找不到文档,我已经玩过它,但找不到正确的格式。
我建议您使用更传统的日期格式,这也有助于轻松排序 - yyyymmddhhmmss。即根本不要使用分隔符。当你第一次看到这样的格式时,它可能看起来很难阅读,但你会在大约 2.5 秒内克服它。
: 不是 Windows 上文件名中的有效字符(以及“\ / * ? < > 和 |),我猜 %time 的扩展包含 : 的分隔小时、分钟和秒。
黑暗中的刺可能会用以下内容替换 %time:~0,10%:
这假设 %time% 总是采用“hh:mm:ss.ss”的形式,我认为这取决于您的语言环境(即我的语言环境使用 a ,而不是 . 来分隔秒和 1/100 秒) . 它应该给你类似 hh_mm_ss 而不是 hh:mm:ss 的东西。如果您想要 1/100 秒的第一个数字(就像您在原始示例中所使用的那样),您可以将最后一个变量扩展更改为采用字符范围 6,4 而不是 6,2。
所以,乍一看,我忽略了 / 在文件名中也是无效的,你可能也想删除它们。假设 %date% 将采用“ddd DD/MM/yyyy”格式,您可以尝试类似(我的语言环境与此不同,因此未经测试):
为了测试所有这些,如果您还没有这样做,我建议您打开 cmd.exe 并在其中输入它。“回声 %time:~0,2%etc.etc.” 找到适合您所在地区的东西。
最后,警告一句,这基本上假设一个特定的语言环境,它不太可能移植到不同的语言环境。
如果你想要日期的通用格式,试试这个。
这对于遵循不同日期格式的服务器非常有用,例如 mm/dd/yyyy 或 dd/mm/yyyy 这将始终确保您获得变量 mm 中的月份、dd 中的日期和 yy 中的年份