本地化影响 Powershell Get-Date 命令的输出

问题描述 投票:0回答:1

我正在尝试在批处理脚本中调用 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%"

但是由于我们有许多不同的可能设置,我无法尝试所有设置。 那么,我如何确定该命令与区域设置无关? 有任何文档吗?或者您知道使用所有可能的区域设置测试此代码的简单方法吗?

谢谢你!

powershell batch-file locale
1个回答
0
投票

逃脱

/
字符:

set myFormat=dd\/MM

这样做可以确保 .NET 在输出字符串中使用

/
literally,而 unescaped 使用
/
作为 culture-property 日期组件分隔符;例如,当
de-DE
(德语)文化生效时,
/
在输出字符串中变为
.

© www.soinside.com 2019 - 2024. All rights reserved.