复制文件,并跳过正在使用的文件

时间:2017-05-22 05:54:33

标签: windows powershell get-childitem

我试图让PowerShell脚本每晚运行,将PDF文件从C:\ share1复制到C:\ share2并写入事件日志。

我当前的文件复制脚本位如下所示:

Try
{
    get-childitem -Path C:\Share1 | ForEach-Object { Copy-Item $_.FullName C:\share2 -verbose } 
    #Writes to event log as success.

}
Catch
    #Logs the event as failed
}

我遇到的问题是正在使用复制/替换的文件。 当文件正在使用时,脚本会停止复制该文件并显示错误:

PS>TerminatingError(Copy-Item): "The process cannot access the file 'C:/share2/1.pdf' because it is being used by another process."

我想至少修改我的脚本,以便继续复制剩余的文件。

例如,如果我有100个文件而第3个文件正在使用中,则整个传输将停止。

如何修改我的脚本以继续剩余的项目?

1 个答案:

答案 0 :(得分:1)

您正在寻找设置为-ErrorAction的常见SilentlyContinue参数:

get-childitem -Path C:\Share1 | ForEach-Object { Copy-Item $_.FullName C:\share2 -verbose -ErrorAction SilentlyContinue } 

注意

Foreach-Object

注2:正如gvee所提到的,这将忽略所有错误。另一个选择是使用sysinternals套件中的handle.exe来检查是否有一个打开的句柄。