昨天我在我们服务器上的一些批处理文件上运行了以下脚本,以替换个人的电子邮件地址,因为她已不在公司。在检查文本时,它工作得很好,日志文件也正确写入。但是,现在双击它时批处理文件不再执行。我看到控制台窗口的快速闪烁,但似乎没有任何文本。添加PAUSE语句没有用,因为它似乎不执行文件中的任何文本。
我将文本复制并粘贴到新的批处理文件中,并且工作正常。我注意到powershell编辑的文件是6KB,新的复制粘贴文件是3KB,因此脚本已经对文件做了一些意外的事情。复制和粘贴每个文件显然会破坏使用脚本批处理事物的目的。我出错的任何想法?
我一直在从我的开发计算机上运行脚本,并且我拥有对网络上所有内容的完全管理员权限。
如果重要,我们在服务器上运行Windows Server 2008 R2 Enterprise。
# Finds string in batch files recursively and replaces text with other text
#
#get command line arguments
param (
[string]$Text = $( Read-Host "Input the text to search for"),
[string]$Replacement = $( Read-Host "Input the replacement text")
)
$Today=get-date -format yyyymmdd
$Results = "{server name}\c$\Batch Jobs\Find Text In Batch Jobs\ReplaceTextInBatchJobs-" + $Text + "-" + $Today + ".txt"
$Path = "{server name}\c$\Batch Jobs"
# get all the files in $Path that end in ".bat".
Get-ChildItem $Path -Filter "*.bat" -Recurse |
Where-Object { $_.Attributes -ne "Directory"} |
ForEach-Object {
#Find whether there is a matching string
If (Get-Content $_.FullName | Select-String -Pattern $Text) {
#Replace the text in this file
(Get-Content $_.FullName) | Foreach-Object {$_ -replace $Text, $Replacement} |
Out-File $_.FullName #write the new results back to the file
#write the file name to a log file
$_.FullName >> $Results
}
}
答案 0 :(得分:2)
Out-File
默认为Unicode编码(这就是文件大小翻倍的原因;每个字符为16位)。您可以使用默认为ASCII的Out-File -Encoding ASCII
或Set-Content
。