我有一个磁盘操作,我希望自动使用名为test.ps1
的Powershell脚本,如下所示:
diskpart /s diskstuff.txt
文件diskstuff.txt如下所示:
list disk
select disk 0
list partition
当我使用notepad.exe手动创建diskstuff.txt
,然后像这样运行它:
PS C:\> powershell.exe .\test.ps1
运行正常,向我提供有关分区的信息。但我只想要一个文件来处理。所以我在test2.ps1
中尝试了这个脚本:
$text1 = 'list disk'
$text2 = 'select disk 0'
$text3 = 'list partition'
$text1 > 'diskstuff2.txt'
$text2 >> 'diskstuff2.txt'
$text3 >> 'diskstuff2.txt'
diskpart /s diskstuff2.txt
当我用:
运行脚本时PS C:\> powershell.exe .\test2.ps1
它没有从 diskpart 返回任何有用的内容。我在 notepad.exe 中检查了diskstuff2.txt
和diskstuff.txt
,看起来完全相同。
我环顾了一下'网,发现了一种检查文件的更好方法。首先转储手写文件(diskstuff.txt
)。
PS C:\> Get-Content diskstuff.txt -Encoding Byte
结果的最后几行是
116
105
111
110
13
10
然后转储生成的文件(diskstuff2.txt
)
PS C:\> Get-Content diskstuff.txt -Encoding Byte
结果的最后几行是:
116
0
105
0
111
0
110
0
13
0
10
0
这表明生成diskstuff2.txt的脚本以某种方式在每个字符之间插入零。有没有办法让我的脚本生成diskstuff2.txt
而没有所有这些零,以便我可以按预期执行test2.ps1
?
答案 0 :(得分:1)
重定向运算符>
和>>
对文件使用UTF-16编码。如果您需要不同的编码,则应使用Out-File
或Set-Content
/ Add-Content
cmdlet。所有都有-Encoding
参数来指定编码。
--------周杰伦更新-----------
这是正确的方法。 test2.ps1
的最终答案是:
$text1 = 'list disk'
$text2 = 'select partition 0'
$text3 = 'list partition'
Set-Content -Path diskstuff2.txt -Value $text1 -Encoding UTF8
Add-Content -Path diskstuff2.txt -Value $text2 -Encoding UTF8
Add-Content -Path diskstuff2.txt -Value $text3 -Encoding UTF8
diskpart /s diskstuff2.txt