使用XCOPY获取复制的文件数

时间:2018-06-21 14:22:30

标签: batch-file cmd

我有一个批处理文件来备份目录。 .bat可以正常工作,但是在我的LOG.txt中我写了一些信息,其中一个应该是复制的文件数量。我在这里指出,XCOPY完成后,无法计算目录中文件的数量,除非它计算目录中每个子文件夹中的每个文件。

到目前为止我所拥有的:

@echo off


SET dct-light_src= dir

For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set dct_light_startting_date=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set dct_light_startting_time=%%a%%b)

SET starttime=%dct_light_startting_date%

IF EXIST C:\Users\user\Desktop\tools_backup\dct_light\dctlight_backup_%starttime%\ ( 
    MD C:\Users\william_silva4\Desktop\tools_backup\dct_light\dctlight_backup%starttime%\dctlight_backup
    SET dct-light_dtn=C:\Users\william_silva4\Desktop\tools_backup\dct_light\dctlight_backup%starttime%\dctlight_backup
    echo A folder for this backup already exists. Beggining overwrite...
) ELSE ( 
    MD C:\Users\william_silva4\Desktop\tools_backup\dct_light\dctlight_backup_%starttime%\dctlight_backup
    SET dct-light_dtn=C:\Users\william_silva4\Desktop\tools_backup\dct_light\dctlight_backup_%starttime%\dctlight_backup\
)

XCOPY %dct-light_src% %dct-light_dtn% /w /e /y

For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set dct_light_finished_date=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set dct_light_finished_time=%%a%%b)

SET startdate=%dct_light_finished_date%
SET starttime=%dct_light_startting_date%_%dct_light_startting_time%
SET finishedtime=%dct_light_finished_date%_%dct_light_finished_time%

CD C:\Users\william_silva4\Desktop\tools_backup\dctlight_backup__%starttime%\

echo.LOG of %starttime%'s Backup>LOG_%startdate%.txt
echo.Start time: %starttime%>>LOG_%startdate%.txt
echo.Finished time: %finishedtime%>>LOG_%startdate%.txt

pause>nul

我曾尝试FOR对目标目录中的文件进行计数,但是没有用,并且我还没有找到有关如何存储XCOPY之后显示的文件数量的线索完成复制。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

计算当前目录和所有子目录中的所有文件。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET /A "N=0"

FOR /F %%f IN ('DIR /S /B /A:-D "*"') DO (
    SET /A "N=!N!+1"
)

ECHO N is %N%

PowerShell使许多事情变得更容易。

Get-ChildItem -File -Recurse | Measure-Object | ForEach-Object { $_.Count }"

如果必须从.bat脚本运行它,则可以使用以下内容。

FOR /F %n IN ('powershell -NoProfile -Command "Get-ChildItem -File -Recurse | Measure-Object | ForEach-Object { $_.Count }"') DO (SET /A "N=%n")

另一种方法是将XCOPY命令的输出捕获到一个文件中,然后从那里计算适用行。