使用进度在 Windows 命令行上复制文件

Posted

技术标签:

【中文标题】使用进度在 Windows 命令行上复制文件【英文标题】:Copy files on Windows Command Line with Progress 【发布时间】:2010-09-08 16:43:16 【问题描述】:

我需要使用 Windows 命令行(默认在 XP Pro 或更高版本上可用)复制文件并在此过程中显示进度。

进度指示器可以在终端或 GUI 窗口中。它旨在用于批处理文件脚本。

【问题讨论】:

Robocopy 是你的朋友。 除了 Robocopy 实际上是文件夹复制器而不是文件复制器。 【参考方案1】:

如果您想复制文件并查看“进度”,我建议在批处理中使用下面的脚本,我从另一个脚本中使用它作为基础

我在脚本复制游戏文件时使用了进度条和百分比核王座:

@echo off
title NTU Installer
setlocal EnableDelayedExpansion

@echo Iniciando instalacao...
if not exist "C:\NTU" (
    md "C:\NTU
)
if not exist "C:\NTU\Profile" (
    md "C:\NTU\Profile"
)
ping -n 5 localhost >nul

for %%f in (*.*) do set/a vb+=1
set "barra="
::loop da barra
for /l %%i in (1,1,70) do set "barra=!barra!Û"
rem barra vaiza para ser preenchida
set "resto="
rem loop da barra vazia
for /l %%i in (1,1,110) do set "resto=!resto!"
set i=0
rem carregameno de arquivos
for %%f in (*.*) do (
    >>"log_ntu.css" (
        copy "%%f" "C:\NTU">nul
        echo Copiado:%%f
    )
    cls
    set /a i+=1,percent=i*100/vb,barlen=70*percent/100
    for %%a in (!barlen!) do echo  !percent!%% /                         
    [!barra:~0,%%a!%resto%]
    echo Instalado:[%%f] / Complete:[!percent!%%/100%]
    ping localhost -n 1.9  >nul
)
xcopy /e "Profile" "C:\NTU\Profile">"log_profile.css"              

@echo Criando atalho na area de trabalho...
copy "NTU.lnk" "C:\Users\%username%\Desktop">nul
ping localhost -n 4  >nul

@echo Arquivos instalados!
pause

【讨论】:

pt-BR: Espero ter ajudado XD。 zh-CN:我希望我能帮到 XD。【参考方案2】:

我使用带有 /z 开关的复制命令通过网络驱动器进行复制。也适用于本地驱动器之间的复制。在 XP 家庭版上测试。

【讨论】:

完美答案。这很好用,如果连接中断,还可以让您重新启动。很惊讶我过去没有注意到这个功能,谢谢。 xp 任意,win7 任意。 +1 谢谢@adrian,它运行良好。但是,通过网络驱动器进行复制有什么好处?我觉得 Robocopy 更适合这些用途? 它只适用于使用 USB 恢复盘运行的 Windows 10。谢谢!!!【参考方案3】:

Esentutl /y 选项允许复制带有进度条的(单个)文件文件,如下所示:

命令应该是这样的:

esentutl /y "FILE.EXT" /d "DEST.EXT" /o

该命令在每台 Windows 机器上都可用,但 y 选项在 windows vista 中提供。 由于它仅适用于单个文件,因此对于小文件看起来不是很有用。 其他限制是该命令不能覆盖文件。 Here's 一个检查目的地的包装脚本,如果需要可以删除它(通过/h 可以看到帮助)。

【讨论】:

如何覆盖目标中的现有文件?我必须手动删除它吗?我在 Win7 上找不到 /o 开关。 @PeterCo 是的 /o 开关在 Win7 上可用。 Esentutl 无法覆盖文件,因此您必须添加行 if exist destination ...【参考方案4】:

robocopy:

Robocopy 或“强大的文件复制”是command-line 目录和/或文件复制command。 Robocopy 在功能上替换了Xcopy,提供了更多选项。从 Windows NT 4.0 开始,它已作为 Windows Resource Kit 的一部分提供,并且首次作为标准功能在 Windows Vista 和 Windows Server 2008 中引入。命令是robocopy...

【讨论】:

关闭,但在 XP 和默认情况下不可用。虽然我会考虑。 它与 Windows 2003 Server 资源工具包一起使用【参考方案5】:

关于所有这些方法的一些有趣的时间安排。如果您有千兆连接,则不应使用 /z 标志,否则会降低连接速度。 Robocopy 或 dism 是唯一可以全速运行并显示进度条的工具。 wdscase 用于从 WDS 服务器进行多播,如果您要对 5 台以上的计算机进行映像,可能会更快。为了获得 1:17 的时间,我以 920Mbps 的速度最大化了千兆位连接,因此您不会同时在两个连接上获得该连接。另请注意,从较大的 wim 文件中导出较小的 wim 索引比复制整个文件要长。

Model  Exe       OS       switches     index    size    time   link speed 
8760w  dism      Win8     /export-wim  index 1  6.27GB  2:21   link 1Gbps
8760w  dism      Win8     /export-wim  index 2  7.92GB  1:29   link 1Gbps
6305   wdsmcast  winpe32  /trans-file  res.RWM  7.92GB  6:54   link 1Gbps
6305   dism      Winpe32  /export-wim  index 1  6.27GB  2:20   link 1Gbps
6305   dism      Winpe32  /export-wim  index 2  7.92GB  1:34   link 1Gbps
6305   copy      Winpe32  /z           Whole    7.92GB  25:48  link 1Gbps
6305   copy      Winpe32  none         Wim      7.92GB  1:17   link 1Gbps
6305   xcopy     Winpe32  /z /j        Wim      7.92GB  23:54  link 1Gbps
6305   xcopy     Winpe32  /j           Wim      7.92GB  1:38   link 1Gbps
6305   VBS.copy  Winpe32               Wim      7.92    1:21   link 1Gbps
6305   robocopy  Winpe32               Wim      7.92    1:17   link 1Gbps

如果您没有可用的 robocopy.exe,为什么不从您复制文件的网络共享中运行它呢?就我而言,我更喜欢这样做,这样我就不必在每次想要进行更改然后更新数十个闪存驱动器时重新构建我的 WinPE boot.wim 文件。

【讨论】:

【参考方案6】:

这是我使用的脚本:

@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
mode con:cols=210 lines=50
ECHO Starting 1-way backup of MEDIA(M:) to BACKUP(G:)...
robocopy.exe M:\ G:\ *.* /E /PURGE /SEC /NP /NJH /NJS /XD "$RECYCLE.BIN" "System Volume Information" /TEE /R:5 /COPYALL /LOG:from_M_to_G.log
ECHO Finished with backup.
pause

【讨论】:

【参考方案7】:

这个技术网link 有一些复制大文件的好信息。我使用了文章中提到的交换服务器实用程序,它显示了进度并在内部使用非缓冲复制功能以加快传输速度。

在另一个场景中,我使用了 robocopy。 Robocopy GUI 让您更容易获得正确的命令行选项。

【讨论】:

【参考方案8】:

您可以轻松编写一个程序来执行此操作,我已经编写了几个程序,显示在复制文件时复制的字节。如果您有兴趣,请发表评论,我会发布一个链接。

【讨论】:

是的,我知道我可以这样的东西。这个想法是重用任何可用资源并简化脚本的共享。 公平地说,Gulzar,Josef 提议给您发送一份,并将他的可用资源发送给您以供重复使用。我怀疑你读了 9 个字后就停止了阅读。 任何 Josef,您都可以将这些分享给社区的其他人 :) 回家后我会把它们挖出来并在此处发布链接。 DOWNVOTE-您还没有发布链接

以上是关于使用进度在 Windows 命令行上复制文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 pv 命令监控 linux 命令的执行进度

带进度条的文件复制

具有进度和传输速率/速度的 PyQt 复制文件夹

windows命令之copy——复制文件或隐藏文件

Windows批处理复制命令是啥?

如何编写 Windows 批处理脚本以从目录中复制最新文件?