【问题标题】:Copy same file to multiple destinations将同一文件复制到多个目的地
【发布时间】:2020-09-28 08:02:31
【问题描述】:

我想使用脚本将文件复制到多个目标,该脚本通过目录过滤并选择 $File_path 中的最新文件,然后更改其名称并将其复制到 $destination,我正在使用的脚本是这样的:

 $File_path = "C:\TEMP\export\liste\Text_Utf8\"
 $destination = "C:\TEMP\export\C7E001"
get-childitem -path $File_path -Filter "Ges?*.txt" | 
    where-object { -not $_.PSIsContainer } | 
    sort-object -Property $_.CreationTime | 
    select-object -last 1  | copy-item -Destination (join-path $destination "FRER3000CCFETES01_IN.DEV")

这只会将它复制到一个位置,有没有办法改进它以将同一个文件复制到多个位置?我见过这个thread,但它似乎不同。

其他地点如下:

C:\TEMP\export\C7P001 C:\TEMP\出口\C7F001 C:\TEMP\出口\C7S001 等等。

谢谢。

【问题讨论】:

  • 但是您的“多个目的地”在哪里?我们所看到的只是您将文件复制到单个目标C:\TEMP\export\C7E001
  • 这些是我的其他目的地:C:\TEMP\export\C7P001 C:\TEMP\export\C7F001 C:\TEMP\export\C7S001,我需要的是如何在脚本中实现它们帮助,我尝试制作一组​​文件夹,然后遍历每个文件夹,但它不起作用,因为我没有设法实现它,因此选择最新文件并重新命名它仍然有效。
  • 如果你想要最新的文件,最好使用LastWriteTime而不是CreationTime
  • 谢谢@Theo,我会试试的,我有兴趣看到你解决这个问题的方法,任何帮助将不胜感激:)

标签: powershell powershell-ise copy-item


【解决方案1】:

虽然我的答案与Peter's answer 差别不大,但它使用LastWriteTime 属性获取最新文件,并使用文件的FullName 属性复制到Copy-Item cmdlet。

$File_path    = "C:\TEMP\export\liste\Text_Utf8"
$destinations = "C:\TEMP\export\C7E001", "C:\TEMP\export\C7F001", "C:\TEMP\export\C7S001"
$fileToCopy   = Get-ChildItem -Path $File_path -Filter "Ges*.txt" -File | 
                Sort-Object -Property $_.LastWriteTime | 
                Select-Object -Last 1

foreach ($dest in $destinations) {
    Copy-Item -Path $fileToCopy.FullName -Destination (Join-Path -Path $dest -ChildPath "FRER3000CCFETES01_IN.DEV")
}

【讨论】:

    【解决方案2】:

    您可以使用 foreach 对象循环

    $File_path = "C:\TEMP\export\liste\Text_Utf8\"
    $destination = "C:\TEMP\export\C7E001", "C:\TEMP\export\C7P001", "C:\TEMP\export\C7F001", "C:\TEMP\export\C7S001"
    $Files = get-childitem -path $File_path -Filter "Ges?*.txt" | 
        where-object { -not $_.PSIsContainer } | 
        sort-object -Property $_.CreationTime | 
        select-object -last 1 
    $Destination | Foreach-Object {copy-item $Files -Destination (join-path $_ "FRER3000CCFETES01_IN.DEV")}
    

    【讨论】:

    • 谢谢你的回复,我试过那个 rn,它告诉我一个错误,在这一行 {copy-item $Files -Destination (join-path $_ "FRER3000CCFETES01_IN.DEV")} 路径 G:\Ges0888_Utf8.TXT没有存在!我们在哪里使用了这条路径?
    猜你喜欢
    • 2014-02-19
    • 2017-05-02
    • 1970-01-01
    • 2017-08-14
    • 2019-06-30
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 2014-08-03
    相关资源
    最近更新 更多