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

yacmzcpb  于 2023-01-27  发布在  Windows
关注(0)|答案(7)|浏览(1035)

我需要使用Windows命令行复制文件(默认情况下,XP Pro或更高版本上可用),并在此过程中显示进度。
进度指示器可以在终端或GUI窗口中。它旨在批处理文件脚本中使用。

z4bn682m

z4bn682m1#

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

t1rydlwq

t1rydlwq2#

robocopy

pbgvytdp

pbgvytdp3#

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

该命令应如下所示:

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

该命令在每台windows机器上都可用,但y选项在windows vista中提供。由于它只对单个文件起作用,因此对于小文件看起来不是很有用。另一个限制是该命令不能覆盖文件。Here's一个检查目标的 Package 器脚本,如果需要,可以删除它(通过传递/h可以看到帮助)。
另一个选择是通过powershell、jscript或vbscript自动化shell.Application对象。这将允许你复制项目,并在浏览器弹出窗口中显示进度。下面是an example script和用法:

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

用这个你可以选择单个文件,目录或者使用带通配符的文件。虽然如果项目太小,弹出会消失得太快。如果目标中有同名的项目,它会创建一个新的项目,结尾是- Copy(因为它是用右键单击和复制/粘贴)。虽然你可以玩option values using the official documentation,并要求覆盖,例如。

t3psigkw

t3psigkw4#

关于所有这些方法的一些有趣的计时。如果你有千兆位连接,你不应该使用/z标志,否则它会杀死你的连接速度。Robocopy或dism是唯一的工具,全速运行并显示进度条。wdscase是用于WDS服务器的多播,如果你正在映像5台以上的计算机,可能会更快。为了获得1:17的计时,我将千兆位连接最大化到920 Mbps,所以你不会在两个连接上同时获得。还要注意,从较大的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文件,然后更新数十个闪存驱动器。

vnjpjtjt

vnjpjtjt5#

这个technet link有一些关于复制大文件的好信息。我使用了文章中提到的一个exchange服务器实用程序,它显示进度,并在内部使用非缓冲复制函数以加快传输速度。
在另一个场景中,我使用了robocopy。Robocopy GUI使您更容易获得正确的命令行选项。

0tdrvxhp

0tdrvxhp6#

下面是我使用的脚本:

@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
ef1yzkbh

ef1yzkbh7#

如果你想复制文件并看到一个“进度”,我建议在批处理下面的脚本,我从另一个脚本作为一个基础使用
我使用了进度条和百分比,而脚本复制游戏文件核王座:

@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

相关问题