2015-03-31 58 views
0

我有,我想用所謂的test.ps1 PowerShell腳本,看起來像這樣自動執行磁盤操作:Powershell腳本:當用手寫入時工作,在生成時不起作用。

diskpart /s diskstuff.txt 

文件diskstuff.txt看起來是這樣的:

list disk 
select disk 0 
list partition 

當我創建diskstuff.txt手使用notepad.exe,然後像這樣運行:

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返回任何有用的東西。我檢查了diskstuff2.txtdiskstuff.txtnotepad.exe,它看起來完全一樣。

我環視了一下網絡,發現了一個更好的檢查文件的方法。首先是手寫代碼文件的轉儲(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

回答

1

重定向運算符>>>對文件使用UTF-16編碼。如果您需要不同的編碼,那麼您應該使用Out-FileSet-Content/Add-Content cmdlet。全部都有-Encoding參數來指定編碼。

--------由Jay更新----------- 這是正確的方法。 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 
+0

謝謝@PetSerAl。這幫助了我很多。 – 2015-03-31 23:05:27

相關問題