Powershell ISEPowershell ISE Masse/Charge wählt für die Umwandlung kodiert (Get-Content & Set-Content)
Hallo, ich versuche, ein Programm zu schreiben, das alle TXT-Dateien in einem Eingangspfad greifen wird, ändern die Codierung und senden Sie die neuen TXT-Dateien an einen Ausgabeort.
Ich habe es funktioniert basierend auf einzelnen Textfelder. Ich bin mir nicht ganz sicher, wie ich es einstellen soll, wo es alle .txt-Dateien statt einer Datei ablegt. (vielleicht ein Array?) Und mit dem gleichen Dateinamen an einem neuen Ort ausgeben.
Meine Frage ist, wie kann ich dies schreiben, um alle TXT-Dateien zu greifen und sie alle an einem neuen Ort auszugeben, anstatt eine einzelne Datei zu einer Zeit zu machen?
Hier ist mein aktueller Code:
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = "Text Converter"
$form.Size = New-Object System.Drawing.Size(300,300)
$form.StartPosition = "CenterScreen"
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(55,230)
$OKButton.Size = New-Object System.Drawing.Size(75,23)
$OKButton.Text = "OK"
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Point(150,230)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Cancel"
$CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$form.CancelButton = $CancelButton
$form.Controls.Add($CancelButton)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,20)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = "Input Path:"
$form.Controls.Add($label)
$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,65)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = "Input Encoding:"
$form.Controls.Add($label)
$textBox2 = New-Object System.Windows.Forms.TextBox
$textBox2.Location = New-Object System.Drawing.Point(10,85)
$textBox2.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox2)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,115)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = "Output Path:"
$form.Controls.Add($label)
$textBox3 = New-Object System.Windows.Forms.TextBox
$textBox3.Location = New-Object System.Drawing.Point(10,140)
$textBox3.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox3)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,170)
$label.Size = New-Object System.Drawing.Size(280,20)
$label.Text = "Output Encoding"
$form.Controls.Add($label)
$textBox4 = New-Object System.Windows.Forms.TextBox
$textBox4.Location = New-Object System.Drawing.Point(10,190)
$textBox4.Size = New-Object System.Drawing.Size(260,20)
$form.Controls.Add($textBox4)
$form.Topmost = $True
$form.Add_Shown({$textBox.Select()})
$result = $form.ShowDialog()
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$x = $textBox.Text
$x
$x2 = $textBox2.Text
$x2
$x3 = $textBox3.Text
$x3
$x4 = $textBox4.Text
$x4
}
Get-Content $x -encoding $x2 |
Set-Content $x3 -encoding $x4
Wo ist der Code, an dem Sie die Dateien holen, konvertieren und speichern? Iow, was hast du bisher probiert? Stack Overflow ist kein Code-Schreibdienst. – alroc
Die Verwendung von WindowsForms ist sinnlos (System.Drawing.Point ändert das nicht). Verwenden Sie zuerst System.IO.Directory.GetFiles, um Ihre Eingabedateipfade abzurufen. Dann (in einem foreach) System.IO.File.ReadAllText, um eine Datei und System.IO.File.WriteAllText zu lesen, um eine Datei mit der gewünschten Codierung zu schreiben. Verwechseln Sie nicht die Windows-Dialogfelder, verwenden Sie stattdessen Befehlszeilenargumente und einen Param-Abschnitt in Ihrem Skript. –
Auch erwähnenswert in [Erweiterte Funktionen] (https: // technet.microsoft.com/en-us/magazine/hh413265.aspx) – user4317867