在其上运行查找/替换Powershell脚本后,批处理文件不再执行

时间:2015-07-30 18:22:52

标签: windows powershell batch-file

昨天我在我们服务器上的一些批处理文件上运行了以下脚本,以替换个人的电子邮件地址,因为她已不在公司。在检查文本时,它工作得很好,日志文件也正确写入。但是,现在双击它时批处理文件不再执行。我看到控制台窗口的快速闪烁,但似乎没有任何文本。添加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
         }
}

1 个答案:

答案 0 :(得分:2)

Out-File默认为Unicode编码(这就是文件大小翻倍的原因;每个字符为16位)。您可以使用默认为ASCII的Out-File -Encoding ASCIISet-Content