首页 > 解决方案 > 使用以下命令的 Powershell 自动化脚本可一次性更新

问题描述

我的脚本工作正常,并根据需要进行更改。唯一的问题是我的输入文件大小保持不变,输出文件不断加倍。我怎么能阻止它?输入是我的原始文件!!当我比较时,我可以看到变化,但我的输出 ctg 文件增加了一倍!!请帮忙

$data = @(
    @{
        pattern = "LACTION 'SQL\(''logility_prod_scp_logility'',"
        replacement = "LACTION 'SQL(''LOGILITY_PROD_SCP_LOGILITY'',"
        inputFile = "C:\files\DW_FEI_input.ctg"
        outputFile = "C:\files\DW_FEI_output.ctg"
    },
    @{
        pattern = "LACTION 'SQL\(''dwfei'',"
        replacement = "LACTION 'SQL(''DW_FEI'',"
        inputFile = "C:\files\DW_FEI_input.ctg"
        outputFile = "C:\files\DW_FEI_output.ctg"
    },    
    @{
        pattern = "LACTION 'SQL\(''DWFEI'',"
        replacement = "LACTION 'SQL(''DW_FEI'',"
        inputFile = "C:\files\DW_FEI_input.ctg"
        outputFile = "C:\files\DW_FEI_output.ctg"
    }

)

$data | 
    ForEach-Object  { 
        (Get-Content $_.inputFile) -replace $_.pattern, $_.replacement | Out-File $_.outputFile
    }

标签: powershellpowershell-2.0powershell-3.0powershell-4.0

解决方案


.ctg今天,您正在运行此过程以在源文件中交换一系列标记。我建议将每个步骤移动到.CSV文件中的行中,如下所示:

#This
$pattern = "LACTION 'SQL\(''logility_prod_scp_logility'',"
$replacement = "LACTION 'SQL(''LOGILITY_PROD_SCP_LOGILITY'',"

我们会将这两个字符串移动到.CSV文件中的列中,如下所示。请注意,由于您的字段中有很多逗号,我建议使用分号:

Source;Target
"LACTION 'SQL\(''logility_prod_scp_logility'',";"LACTION 'SQL(''LOGILITY_PROD_SCP_LOGILITY'',"

我们可以像这样检索这些值:

$strings | convertfrom-csv -Delimiter ';'

一体化

首先,您应该手动将所有标记从这九个步骤移动到分号分隔的值列表中。

其次,完成此操作后,您可以遍历 中的每一行.CSV以仅用六行替换所有标记。

$string = Import-Csv -Delimiter ';' -Path c:\PathTo\YourFile.csv
ForEach($string in $strings){

   (Get-Content "C:\files\DW_FEI_DEV_input.ctg") -replace $string.Source,$string.Target |
      Out-File "C:\files\DW_FEI_DEV_output.ctg"

}

推荐阅读