【发布时间】:2018-11-07 01:07:34
【问题描述】:
我正在编写一个Windows 批处理文件,batch file 应该在特定文件夹中输出一个文件。我希望文件名写成如下:
filename-yyyymmdd.csv
yyyymmdd 代表当前日期。
我的batch file 代码如下:
cd:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn
bcp "SELECT TOP 100 * FROM xxxx.dbo.xxxxx" queryout c:\test\csv\confirmed.csv -t, -c -S xxxx\xxxxx -U xxx -P xxxxxxxxxx
set mydate=%date:~10,4%%date:~4,2%%date:~7,2%
echo %mydate%
copy c:\test\csv\confirmed.csv c:\test\csvwithdates\confirmed-%mydate%.csv
我得到以下文件名作为输出:confirmed-ay18.csv
所需输出:confirmed-20180528.csv
我在StackOverflow 上查看了以下问题,但我很难实施建议的答案:
Get Date in YYYYMMDD format in windows batch file
Windows batch: formatted date into variable
我做错了什么?
【问题讨论】:
-
为什么要使用旧的
CMD(20 岁以上)批处理语法而不是 Powershell ? Powershell 是所有 Microsoft Server 产品的主要脚本接口。您可以使用sqlserver package 中的例如Invoke-SqlCmd来查询、格式化和导出数据。 -
已有 20 年历史的
cmd语法从未用于执行复杂的字符串格式化。另一方面,Powershell 中的字符串格式化可以使用与 .NET 相同的格式化字符串、方法,使字符串操作变得更容易很多。例如(get-date).ToString('yyyyMMdd')返回20180528或(get-date).ToString('o')以获得完整的 ISO8601 格式 -
您不应该尝试从
%date%获取任何数据,因为它取决于区域设置,并且可能因系统而异,甚至因用户而异。请改用here 中的一种方法。 -
从未尝试过 Powershell。谢谢你的链接。我将通过它,它似乎非常适合 sql 查询。
-
我认为没有必要争论哪种方法获取日期更好,尤其是当它只是为了获取文件名的日期时。
标签: sql-server windows date batch-file bcp