【问题标题】:Powershell - Splitting string into separate componentsPowershell - 将字符串拆分为单独的组件
【发布时间】:2014-08-31 23:25:33
【问题描述】:

我正在编写一个脚本,它基本上会执行以下操作:

从文本文件中读取一些参数:

DriveLetter ThreeLetterCode ServerName VolumeLetter Integer

例如。 W MSS SERVER01 C 1

这些值恰好形成一个文件夹目标W:\MSS\,以及一个采用以下命名约定的文件名:

SERVERNAME_VOLUMELETTER_VOL-b00X-iYYY.spi - Where The X is the Integer above

值 Y 我需要稍后计算,因为这恰好是增量映像(备份)的值,我需要计算最新的增量。

所以此刻 --> 计算文件中的行数,然后循环获取这么多行。

$lines = Get-Content -Path PostBackupCheck-Textfile.txt  | Measure-Object -Line
for ($i=0; $i -le $lines.Lines; $i++)

在这个循环中,我需要执行 Get-Content 来读取我当前正在查看的行,即第 0 行、第 1 行、第 2 行,因为我在开头写的格式中会有多行并拆分将行放入一个数组中,由此文件的每个部分,如上面的命名约定所示,位于 a[0]、a[1]、a[2] 中。等等

这样做的原因是,我需要对包含这些文件的文件夹进行排序,按日期查找最新文件,然后将 _iXXX.spi 部分放入数组值 a[X] 中,这样我就有了要挂载的完整文件名。此值将替换 iYYY.spi

这有点复杂,因为在按日期对所有内容进行排序之前,我还必须确保在使用 -Include 执行 Get-ChildItem 时,我只包括与从文本文件中输入的参数匹配的文件名:

所以,

SERVER01_C_VOL-b001-iYYY.spi and not anything else. 
i.e. not  SERVER01_D_VOL-b001-iYYY.spi

然后从 Get-ChildItem -Include 上的排序中获取 iYYY 值并将其放入适当的数组项中。

我真的不知道从哪里开始,所以任何想法都值得赞赏!

希望我已经解释得足够详细了。我也在Pastebin上放了代码:http://pastebin.com/vtFifTW6

【问题讨论】:

    标签: powershell


    【解决方案1】:

    这不需要那么复杂。您可以从使用简单管道对文件中的行进行操作开始:

    Get-Content PostBackupCheck-Textfile.txt |
      Foreach-Object {
        $drive, $folder, $server, $volume, [int]$i = -split $_
        ...
      }
    

    循环内的行在空格处分割当前输入行并分配适当的变量。这样就省去了在那里处理数组的麻烦。接下来的所有内容也需要在所述循环中。

    然后您可以构造文件名模式:

    $filename = "$server_$drive_VOL-b$($i.ToString('000'))-i*.spi"
    

    您可以使用它来查找所有合适的文件并按日期对其进行排序:

    $lastFile = Get-ChildItem $filename | sort LastWriteTime | select -last 1
    

    【讨论】:

    • 哎呀,这真的很简单,感谢乔伊的起点!
    • 别担心,我得到了这个工作,感谢所有的帮助!这使它变得非常简单!
    • 抱歉,我后来的编辑有点短,而且有点错误,因为 SO 的移动界面没有让我看到问题(在这种情况下很长;))。但是,如果使用得当,PowerShell 可以非常简单明了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多