我正在尝试在批处理脚本中调用 Powershell Get-Date 命令。这是我的批处理脚本:
@echo off
setlocal EnableDelayedExpansion
set myFormat=dd/MM
set locale_independent_get_date=powershell -NonInteractive -Command "Get-Date -Format %myFormat%"
for /F "tokens=1,2 delims=/" %%i IN ('%locale_independent_get_date%') DO (
set dd=%%i
set mm=%%j
)
echo Day:[%dd%]
echo Month:[%mm%]
因为我使用 -Format 开关显式指定格式,所以我希望每个不同的区域设置都有相同的输出。
但我发现,事实并非如此。上面的 Powershell 命令在某些不同的设置下无法按我的预期工作。
使用 -Format 显式指定格式不足以确保区域设置独立性吗?显然不是,但我想知道为什么。
另外,我尝试了 -UFormat 开关,而不是 -Format。在这种情况下,命令在有问题的情况下也能按预期工作。这是我所做的:
set myFormat=%%d/%%m
set locale_independent_get_date=powershell -NonInteractive -Command "Get-Date -UFormat %myFormat%"
但是由于我们有许多不同的可能设置,我无法尝试所有设置。 那么,我如何确定该命令与区域设置无关? 有任何文档吗?或者您知道使用所有可能的区域设置测试此代码的简单方法吗?
谢谢你!
逃脱
/
字符:
set myFormat=dd\/MM
这样做可以确保 .NET 在输出字符串中使用
/
literally,而 unescaped 使用 /
作为 culture-property 日期组件分隔符;例如,当 de-DE
(德语)文化生效时,/
在输出字符串中变为 .
。