我是PowerShell的新手(并且对英语也不是很好),我刚刚面对我的第一个问题,这个问题足以在论坛上提问。但是让它缩短。
我有一个脚本,它带有一个列表,其中包含一个数字,后跟一个由空格分隔的名称。我需要它来保存这个结构,但是当我让它读取脚本创建的文件时,软件会崩溃。
我一直在做一些测试,有些东西对我很有帮助,它是采用软件创建的文件并手动粘贴PowerShell创建的文件的文本。当我要保存文件时,wordpad向我显示了一个sais的提示:
“您将以纯文本格式保存文档,这将删除所有格式化”
我点击确定,稍后在软件中,一切正常。 这是我用来创建文本文件的脚本:
cls
$formats = "legacy", "standard"
$prefixname = "GF META"
$sideboard = "Sideboard"
$i=0
do{
$url = "https://www.mtggoldfish.com/metagame/$($formats[$i])/full#paper"
echo $url
$html = Invoke-WebRequest $url
$mainDeck = $html.parsedhtml.getElementsByClassName("archetype-tile")
echo $mainDeck.length
$e=0
do{
$sUrl = "https://www.mtggoldfish.com/archetype/$($mainDeck[$e].id)"
echo $sUrl
$shtml = Invoke-WebRequest $sUrl
$smainDeck = $shtml.parsedhtml.getElementsByTagName("input") | Where{ $_.name -eq "deck_input[deck]" }
$deck = $smainDeck.value
$deck = $deck -split '\n'
$nmainDeck = $shtml.parsedhtml.getElementsByClassName("deck-view-title")
$nname = $nmainDeck[0].innerText
$fullname = $nname.Substring(0,$nname.Length-23)
$tfullname = "$prefixname $($formats[$i]) $fullname"
$deckFile = "[metadata]`nName=$tfullname`n[Main]"
$n =0
do{
$compare = $deck[$n][0]
echo $compare
if ($deck[$n][0] -eq 's'){
$deckFile = "$deckFile`n[Sideboard]"
}else{
$deckFile = "$deckFile`n$($deck[$n])"
}
$n +=1
}while($n -le $deck.Length)
$deckFile = $deckFile.ToString()
echo $deckFile
$deckFile | Out-File "C:\Users\aleja\Desktop\Mazos\$tfullname.dck"
$e += 1
}while ($e -le $mainDeck.length)
$i += 1
}while ($i -le $formats.Length)
非常感谢你的关注。 (顺便说一下软件是mtg Forge,文件是甲板)
答案 0 :(得分:0)
Out-File
的默认编码是Unicode,但是Forge expects UTF-8 encoding。
更改使用默认编码编写文件
$deckFile | Out-File "C:\Users\aleja\Desktop\Mazos\$tfullname.dck"
明确使用UTF-8编码
$deckFile | Out-File "C:\Users\aleja\Desktop\Mazos\$tfullname.dck" -Encoding UTF8