【问题标题】:Powershell copy script with condition check带有条件检查的 Powershell 复制脚本
【发布时间】:2013-03-21 08:08:51
【问题描述】:

我们的要求是将文件从源文件夹复制到目标文件夹。

该子句是在脚本的第一次运行期间应复制所有内容,但在随后的运行中,它应仅复制那些尚未复制且是新文件的文件。

问题出在目标文件夹中,我们有一个脚本可以处理文件并在执行后将其删除。所以我们不希望将源中的重复文件复制到目标。

例子

source-> abc.txt,def.xt

第一次运行后

dest->abc.txt,def.txt

后续运行

source->abc.txt,def.xt, ghi.txt

dest->abc.txt,def.xt, ghi.txt

现在,当另一个脚本在 dest 文件夹上运行并删除 abc.txtghi.txt 时,逻辑应该是

source->abc.txt,def.xt, ghi.txt,jkl.txt

现在脚本运行时应该只复制新文件

dest->ghi.txt, jkl.txt

我在想我们是否可以在脚本第一次运行后将输出记录到 txt 文件中,然后在将任何内容从源文件夹复制到之前设置条件以检查该日志文件是否存在该文本文件目的地。

希望能解释一下。

谢谢

【问题讨论】:

  • 使用robocopy。它是为此类任务而设计的。
  • 我用 robocopy,$src_folder="C:\Users\Desktop\Test" $dest_folder="C:\Users\Desktop\Test1" Robocopy $src_folder $dest_folder /m IF ($LASTEXITCODE -eq 0) { 写入主机复制成功} Else { 写入主机错误复制文件} 但问题是它正在复制所有内容。我想要源文件夹中但从未复制到目标文件夹的内容
  • 作为documented,选项/m 复制所有设置了archive 属性的源文件。如果要排除目标中已存在的文件,请使用/xx(排除额外文件)。如果您想排除在过去任何时候复制到目标的文件,无论它们是否仍然存在于目标中,您确实必须使用自定义脚本和复制历史记录。
  • @ansgar 这是正确的,正是我们打算做的......所以在创建自定义脚本时需要帮助......如果你能指导我......我尝试应用逻辑但不是很熟悉使用 windows powerdhell commandlets..这是我的测试脚本:
  • 不知何故无法粘贴整个脚本..将其分片发布

标签: powershell copy


【解决方案1】:

您可以像这样复制那些不在历史记录中的文件:

$sourceFolder = "..."
$destFolder   = "..."
$historyFile  = "history.txt"

$recurse = $false

$history = Get-Content $historyFile

Get-ChildItem $sourceFolder -Recurse:$recurse | ? {
  -not $_.PSIsContainer -and $history -notcontains $_.FullName
} | % {
  Copy-Item $_.FullName $destFolder
  $_.FullName >> $historyFile
}

$_.FullName >> $historyFile 行将复制的文件附加到历史文件中。

【讨论】:

    猜你喜欢
    • 2011-12-30
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    相关资源
    最近更新 更多