【发布时间】:2016-06-06 03:25:56
【问题描述】:
POWERSHELL ISE
您好,我正在尝试编写一个程序,该程序将抓取输入路径中的所有 .txt 文件、更改编码并将新的 .txt 文件发送到输出位置。
我让它基于单个文本框工作。我不确定如何将它设置在它抓取所有 .txt 文件而不是一个的位置。 (也许是一个数组?)并在新位置以相同的文件名输出。
我的问题是如何编写这个来获取所有 .txt 文件并将它们全部输出到一个新位置,而不是一次只做一个文件?
这是我当前的代码:
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
【问题讨论】:
-
您实际执行获取、转换和保存文件工作的代码在哪里? IOW,到目前为止,您尝试过什么? Stack Overflow 不是代码编写服务。
-
为此使用 WIndowsForms 毫无意义(System.Drawing.Point 不会改变这一点)。首先使用 System.IO.Directory.GetFiles 获取您的输入文件路径。然后(在 foreach 中) System.IO.File.ReadAllText 读取文件和 System.IO.File.WriteAllText 写入具有所需编码的文件。不要乱用 WINdows 对话框,而是使用命令行参数和脚本中的 param 部分。
-
另外值得一提的是Advanced Functions