首页 > 解决方案 > 如何从自动化字符串中删除空格以导出到 SQLPlus SELECT 命令 LockedOut.sql 文件

问题描述

这是从 PowerShell 5.1 上的 Windows 18_3 版本到 Linux 上的 SQLPlus 12c 的命令的自动化,其中加载了 Microsoft 模块。我需要清除字符串的空白以在自动化选择脚本上输入通配符数据(最终脚本将找到丢失的 TIFF 图像并重新插入它)。我无法删除tee.

最新的尝试在帖子中,但我已经尝试过Trim, Split, Replace, Remove, Substring, >>, Write-Host -NoNewline,... 我非常接近。

当我Write-Host -NoNewline成功删除 CRLF 时,但不是尽可能地删除Tee,Write-OutOut-File那样的内容。

#Add-Type -AssemblyName System.Data.OracleClient
$filefolder = "C:\EMSCadre\iGateway\clint\Input_Images\"
$Files = Get-ChildItem $FileFolder -Name -File
$longname = $Files.Get(2)
$shortname = $longname.Replace("_tiff","").Replace("cns","").Substring(9).Split('".tif"')
echo "select LD_CASE_NUMBER FROM LOG_data where ld_message_3 like %$shortname%" |
    tee -Verbose c:\scripts\input\lockedout_test.sql
type c:\scripts\input\lockedout_test.sql

#Failed attempts
#echo "select LD_CASE_NUMBER FROM LOG_data where ld_message_3 like %($shortname1.TrimEnd('_',"")%" |
#  tee -Verbose c:\scripts\input\lockedout_test.sql

显示最后一个空格的最新结果%

选择 LD_CASE_NUMBER FROM LOG_data where ld_message_3 like %100838953_180130001 %
选择 LD_CASE_NUMBER FROM LOG_data where ld_message_3 like %100838953_180130001 %

帮助排除故障的详细信息:

PS C:\脚本> $文件
2823910000.tif
2823910002.tif
cns20180827_100838953_180130001_tiff.tif
曝光工程-动态范围-测试-f16-分级-TIFF-RGB-parade.jpg

PS C:\scripts> $shortname
100838953_180130001

标签: powershellsplitbuild-automation

解决方案


在我看来就像Split()语句的最后一步 ( )

$longname.Replace("_tiff","").Replace("cns","").Substring(9).Split('".tif"')

应该从文件名中删除扩展名。这不是如何Split()工作的。该方法将字符串解释".tif"为字符数组,并将给定的字符串拆分为任何这些字符(", ., f, i, t)。以这种方式拆分字符串100838953_180130001.tif会给你一个包含 5 个元素的数组,其中最后 4 个是空字符串:

[ '100838953_180130001', '', '', '', '' ]

将带有该数组的变量放入字符串中,通过使用输出字段分隔符 ( $OFS) 将其元素连接起来,将数组拆分为字符串,默认情况下,该分隔符是一个空格,从而产生您观察到的尾随空格。

要从文件名中删除前缀cns..._和子字符串_tiff以及扩展.tif名,请使用以下命令:

$shortname = $longname -replace '^cns\d*_|_tiff|\.tif$'

该正则表达式替换将删除字符串开头的子字符串“cns”,后跟任意数量的数字和下划线(^),字符串中任何位置的子字符串“_tiff”,以及结尾的子字符串“.tif”一个字符串 ( $)。


推荐阅读