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

问题描述 投票:0回答:8

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

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

windows batch-file scripting
8个回答
64
投票

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


21
投票

机器人复制

Robocopy,或“强大的文件复制”,是一个命令行目录和/或文件复制命令。 Robocopy 在功能上取代了 Xcopy,并提供了更多选项。从 Windows NT 4.0 开始,它作为 Windows Resource Kit 的一部分提供,并首次作为标准功能引入 Windows VistaWindows Server 2008。命令是

robocopy
...


16
投票

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

enter image description here

命令应如下所示:

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

该命令在每台 Windows 计算机上都可用,但

y
选项在 Windows Vista 中出现。 由于它仅适用于单个文件,因此对于小文件来说看起来不太有用。 其他限制是该命令无法覆盖文件。 这是一个包装脚本,用于检查目的地,如果需要可以将其删除(可以通过传递
/h
查看帮助)。


另一种选择是通过 powershell、jscript 或 vbscript 自动化 shell.Application 对象。这将允许您复制项目,并在浏览器弹出窗口中显示进度。这是示例脚本和用法:

call shellCopy.bat "D:\Folder\anotherFolder" "C:\Destination"

使用此功能,您可以选择单个文件、目录或使用带通配符的文件。但如果物品尺寸太小,流行就会消失得太快。如果目标中存在同名的项目,它将创建一个新项目,末尾带有

 - Copy
(因为它与右键单击和复制/粘贴一起使用)。尽管您可以使用官方文档来使用选项值并要求覆盖,例如。


6
投票

关于所有这些方法的一些有趣的时间安排。如果您有千兆位连接,则不应使用 /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 文件。


1
投票

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

在另一个场景中,我使用了 robocopy。 Robocopy GUI 使您可以更轻松地获得正确的命令行选项。


0
投票

这是我使用的脚本:

@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

0
投票

如果您想复制文件并查看“进度”,我建议使用以下批处理脚本作为基础

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

@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

0
投票

我厌倦了找不到合理的解决方案来解决这个问题,所以我编写了自己的复制工具。

放心使用

https://github.com/Titaniser/CopyWithProgress

© www.soinside.com 2019 - 2024. All rights reserved.