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

Windows 复制文件,并跳过正在使用的文件,windows,powershell,get-childitem,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 a

我正在尝试制作一个每晚运行的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个文件,而第三个文件正在使用,则整个传输将停止


如何修改脚本以继续处理其余项目?

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

get-childitem -Path C:\Share1 | ForEach-Object { Copy-Item $_.FullName C:\share2 -verbose -ErrorAction SilentlyContinue } 
注意:此处不需要
Foreach对象
cmdlet:

Get-ChildItem -Path C:\Share1 | Copy-Item C:\share2 -verbose -ErrorAction SilentlyContinue

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

虽然这将工作-它将忽略所有错误,而不仅仅是文件在使用onesHi!非常感谢您的回复!如果我不使用ForEach对象,我将无法获得详细的输出(至少在控制台中)。但是,即使ErrorAction设置为静默继续,它仍然会停止。相同的终止错误。。。还有其他提示吗?发生此问题时返回的整个错误是什么?您可以捕获特定的错误类型。它开始复制文件,并在另一台机器正在使用的文件上停止,然后转到“Transcript stopped”,上面提到的“PS terminatingError”作为转录输出文件的内容。