将参数传递到文件中的每一行

时间:2019-06-18 00:18:31

标签: powershell

我试图将昨天的日期值作为参数传递给我放置在files.txt中的文件名列表。文件名带有时间戳,我需要将昨天的文件复制到网络共享驱动器。我已经将$ odate作为日期传递到files.txt中的文件名中,我需要将$ odate替换为昨天的日期,并每天将文件从1个网络共享驱动器复制到另一个驱动器。

我尝试在每行的文件名中传递参数($ odate),并按照下面的代码片段进行定义

foreach($line in Get-Content .\Desktop\files.txt){
    $odate = (get-date (get-date).AddDays(-1) -UFormat "%Y%m%d")
    echo $line}

PB724_SSNTXN_D110A01_FPRS_ $ odate * .DAT.gz PB724_SSNTXN_D110A02_FKEN_ $ odate * .DAT.gz

我正在获取文件名列表,就像我在files.txt中输入的那样,而$ odate不会被替换为昨天的日期。

1 个答案:

答案 0 :(得分:0)

您可以这样做:

Get-Content -Path .\Desktop\files.txt |
    ForEach-Object {$odate = (Get-Date).AddDays(-1).ToString('yyyyMMdd')}{
        $ExecutionContext.InvokeCommand.ExpandString($_)
    }

因此,对于包含内容的文件:

PB724_SSNTXN_D110A01_FPRS_$odate.DAT.gz
PB724_SSNTXN_D110A02_FKEN_$odate.DAT.gz

您将获得输出:

PB724_SSNTXN_D110A01_FPRS_20190617.DAT.gz
PB724_SSNTXN_D110A02_FKEN_20190617.DAT.gz