首页 > 解决方案 > 为什么 PowerShell 在我的文件中输入中文字符?

问题描述

我正在尝试制作一个将.txt文件内容转换为变量的系统。不过,这不是我的问题;出于某种原因,我的文件正在读取我未输入且无法使用的字符。

请注意:我正在做的事情绝不是有效的,我很肯定还有其他方法可以解决这个问题,但这对我来说是最好的方法。此外,在编码方面,我并不是非常聪明。只是想我会把它扔在那里。

首先,让我向您展示我现有的系统。

值.txt

4

这个文件有我想变成一个变量的内容。

批处理文件

setcmdvar.bat

set cmdvar=

我将其留空,以便我可以将 的内容value.txt放在最后(稍后会详细介绍)。

开始.bat

@echo off
call PowerShell.exe cd "C:\Users\%username%\Desktop\Folder"; $PSvar = Get-Content value.txt; $PSvar >> setcmdvar.bat
pause
call setcmdvar.bat
pause
echo The variable equals %cmdvar%.
pause
exit

第二行在start.batPowerShell 中创建此脚本:

PowerShell 脚本

cd "C:\Users\%username%\Desktop\Folder\"
$PSvar = Get-Content value.txt; $PSvar >> setcmdvar.bat

这会在 PowerShell 中创建一个变量$PSvar,它等于 ; 的内容value.txt。在我们的例子中是 4。然后,它将$PSvar(4) 放在 的末尾setcmdvar.bat,使用>>,将其更改为:

setcmdvar.bat(已更改)

set cmdvar=4

或者,至少,据我所知,它应该。相反,它将文件更改为:

set Items=桔⁥瑳楲杮椠⁳業獳湩⁧桴⁥整浲湩瑡牯›⸢ †⬠䌠瑡来牯䥹普††††㨠倠牡敳䕲牲牯›㨨
嵛‬慐敲瑮潃瑮楡獮牅潲割捥牯䕤捸灥楴湯 †⬠䘠汵祬畑污晩敩䕤牲牯摉㨠吠牥業慮潴䕲灸捥整䅤䕴摮晏瑓楲杮 

或者其他一些奇怪的字符组合。我看了一下,是中文的。还有一些其他字符,例如 †、⬠、›、⸢、 和 ⁳。我不知道为什么要输入这些。除此之外,start.bat 还显示以下内容:

Press any key to continue . . .
(PowerShell script runs here)
'■s' is not recognized as an internal or external command,
operable program or batch file.
Press any key to continue . . .
The variable equals .
Press any key to continue . . .
(exit)

我没有输入“■s”,我认为这可能是问题所在。不管是什么,有人有什么想法吗?

PS 如果我的代码很复杂,或者它看起来很糟糕,我很抱歉,但我这样做是有原因的。实际上,主要是我的无能。但我认为这样更好。

另外,我知道有类似的命令for /f "delims=" %a in ('ver') do @set foobar=%a(我刚刚从互联网上删除了这个),但我已经尝试过类似的命令,我想我只是不太了解它们,因为它们不起作用。

感谢您的帮助!

标签: powershellbatch-filecmd

解决方案


>>混合编码有问题。另外它默认为utf16。我建议改变

$PSvar >> setcmdvar.bat

add-content setcmdvar.bat $PSvar

我不确定如何将所有内容保持在一条线上。您可以像这样制作 setcmdvar.bat:

set cmdvar=^

所以它继续。


推荐阅读