【问题标题】:Invoke Windows copy from PowerShell从 PowerShell 调用 Windows 副本
【发布时间】:2016-02-19 00:05:06
【问题描述】:

我正忙于创建一个 PowerShell 脚本,其中一个文件夹需要作为脚本的一部分复制到另一个文件夹。 为此,我想使用标准的 Windows 复制界面,并利用提示和选择,例如“此位置已有同名文件。”、“您要合并此文件夹”、“为all”等,而不是自己编程。

我调查了一个视图方向:

  • 使用IFileOperation::CopyItem 方法,例如HowTo: Display progress dialog using IFileOperation 但我可以找到任何关于如何将其嵌入 PowerShell 的提示
  • 使用 Verbs() Copy/Paste,但尽管示例 Invoke-FileSystemVerb -Path "C:\TestDir -Verb Cut; Invoke-FileSystemVerb -Path "\\server\share" -Verb Paste” 另有建议,但我可以粘贴手动复制/剪切但无法使用 CmdLet 或仅使用 Verb.DoIt() 方法复制/剪切的文件(我出于安全原因怀疑这一点)。
  • 模拟拖放?

但找不到任何可行的解决方案。 任何建议如何从 PowerShell 执行此操作?

【问题讨论】:

    标签: windows powershell copy-paste


    【解决方案1】:

    我用它从 ZIP 文件中提取,它似乎带有所有提示和进度条:

    $shell = New-Object -Com Shell.Application
    $folder = $shell.NameSpace(“$path\Folder”)
    $shell.NameSpace($otherpath).CopyHere($folder)
    

    【讨论】:

    • 谢谢,我一直在寻找这样的解决方案好几个小时,这似乎确实可以解决问题。
    • ForEach 循环相比,最好一次复制所有项目:.CopyHere($zip.items()) 这还将显示根项目的“为所有项目执行此操作” .
    • 我修改它以复制整个文件夹而不是其内容,这在 IMO 中要整洁得多(除非您只想复制内容)
    • CopyHere() 提示对我帮助很大,但我使用了一些不同的实现,因为我想复制 $Folder 中的所有项目而不是顶部文件夹本身:$Shell.Namespace($LocalDestination).CopyHere($Shell.NameSpace($RemoteSource).Items())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    相关资源
    最近更新 更多