使用powershell命令更改字体样式的批处理文件

使用powershell命令更改字体样式的批处理文件,powershell,batch-file,encoding,cmd,utf-8,Powershell,Batch File,Encoding,Cmd,Utf 8,我有一个批处理文件,它应该显示umlaute。我发现,您必须使用chcp 65001,因此我需要在控制台中使用字体样式Lucida Console。这个很好用 当使用chcp 1252umlaute时,如果未正确显示,则会使用UTF-8编码从csv文件中读取文本 但是现在我需要从这个bat文件运行powershell命令。这些命令会更改字体样式,因此当cmd尝试显示umlaute时,它会关闭。有没有解决办法 以下是我的代码中最重要的部分: @echo off setlocal EnableDel

我有一个批处理文件,它应该显示umlaute。我发现,您必须使用
chcp 65001
,因此我需要在控制台中使用字体样式
Lucida Console
。这个很好用

当使用
chcp 1252
umlaute时,如果未正确显示,则会使用UTF-8编码从csv文件中读取文本

但是现在我需要从这个bat文件运行powershell命令。这些命令会更改字体样式,因此当cmd尝试显示umlaute时,它会关闭。有没有解决办法

以下是我的代码中最重要的部分:

@echo off
setlocal EnableDelayedExpansion EnableExtensions
chcp 65001

rem ...

set InputFile=C:\Users\...\Documents\file.csv    

for /f "delims=" %%d in ('powershell -Command [DateTime]::Today.AddDays^(-2^).ToString^(\"dd.MM.yyyy\"^)') do (
    rem ...
)

rem ...

for /f "tokens=*" %%i in ('type "%InputFile%"') do (
    rem ...
    for %%g in (%%i) do (
        rem ...
        set /A outyear=tyear-year
        set out[!index!]=!data[1]! !data[2]! !data[3]! !outyear! 
        set /A index=!index!+1 
    )
)

for /F "tokens=2 delims==" %%s in ('set out[') do echo %%s
以下是用于测试的CSV文件的简短片段:

Test;Musterman;Max;Test;21.01.1991
Test;Musterman2;Max2aöüäß;Test;22.01.1993
Test;Musterman3;Mülleraöüäß;Test;23.01.1989
我已经尝试了以下方法,但不起作用


注意我也在使用Windows 7,也许这也是它不起作用的原因。

我能够用建议的@GerhardBarnard方法解决这个问题

现在,我通过第二个文件启动批处理文件,该文件运行powershell命令,然后使用参数调用另一个批处理文件。看起来是这样的:

@echo off

rem ...

for /f "delims=" %%d in ('powershell -Command [DateTime]::Today.AddDays^(1^).ToString^(\"dd.MM.yyyy\"^)') do (
    rem ...
)

rem ...

call File.bat %param1% %param2% %param3% %param4% 

在第二个文件中,我现在解析CSV文件,因为powershell命令在不同的批处理文件中运行,所以字体样式没有更改。因此,它可以毫无问题地显示所有umlaute。

无法进行测试,因为我的windows 10计算机不会重现您的问题。您是否有机会尝试过启动powershell?或者,您可以在另一个批处理文件中运行powershell循环,并将值发送回此批处理文件,但我无法再次测试它,因为我没有遇到相同的问题。我正在使用Windows 7,将尝试您建议的方法。无法复制。在您的示例中甚至没有任何UMLAUT。我运行了你的脚本,工作正常,没有崩溃。我甚至不知道为什么会这样。@marsze我用umlaute从csv文件中读取文本,然后在cmd中显示,这不起作用。@Meister96Fels提取csv是合理的,或者用umlauts进行任何其他类型的输出来重现问题。