在批处理文件中枚举Windows区域设置

时间:2014-05-02 23:17:32

标签: windows date batch-file

我有一个运行批处理文件的预构建编译事件。批处理文件采用日期并去除年/月/日,如下所示:

set PRODUCT_YEAR=%DATE:~12,2%
set PRODUCT_MNTH=%DATE:~4,2%
set PRODUCT_DAYS=%DATE:~7,2%

然后,我通过将这些变量与其他数据一起管道到输出头文件来动态创建头文件。

请注意,我无法使用编译预指令来获取日期,因为我还需要将此相同的头文件包含在安装数据包生成器中,该数据库生成器不像预指令那样支持编译器。

这一切都运行正常,但我们的一位开发人员发现,不同的区域设置会导致日期错误分割。如果您有USA设置日期格式与CANADA设置不同。

我对支持所有区域设置不感兴趣。我对改变区域环境不感兴趣。我只是希望能够确定我是在运行美国设置还是加拿大设置,以便我可以相应地删除日期。

我已经检查了SO,并且有很多非常庞大的代码解决方案需要进行相当多的研究才能将它们插入到我们的构建环境中,现在这不是一个选项。

所以我的问题是:有没有办法可以判断区域设置是否是批量文件中的USA v CANADA,以便我可以对其采取适当的措施?

2 个答案:

答案 0 :(得分:2)

使用Wmic,您可以在区域设置的基础上获得此值:

@echo off
for /f "tokens=1-3" %%a in ('wmic path Win32_LocalTime Get Day^,Month^,Year ^|find "0"') do (
set "$day=00%%a"
set "$month=00%%b"
set "$year=%%c")

set PRODUCT_YEAR=%$Year:~-2%
set PRODUCT_MNTH=%$Month:~-2%
set PRODUCT_DAYS=%$Day:~-2%

echo %PRODUCT_YEAR%
echo %PRODUCT_MNTH%
echo %PRODUCT_DAYS%

答案 1 :(得分:1)

此代码的前四行将为您提供XP Pro及更高版本中可靠的YY DD MM YYYY HH Min Sec变量。

@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%"
set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"
pause