计算批量复制中跳过的文件数

时间:2016-01-01 03:14:35

标签: batch-file

我做了一个短批来将我的音乐复制到我的车载USB

@echo off

set OLDDIR=%CD%

set /a UPCOUNT=0
set /a TOTALCOUNT=0

setlocal ENABLEDELAYEDEXPANSION

cd /d E:\Music
   for /r %%a in (*.m4a) do (
     set /a TOTALCOUNT=!TOTALCOUNT!+1
   )

   for /r %%a in (*.m4a) do (
     echo n | COPY/-y "%%a" %OLDDIR%
     set /a UPCOUNT=!UPCOUNT!+1 
     cls
     echo !UPCOUNT! / !TOTALCOUNT!
   )

endlocal

它工作正常,但我也想知道

跳过了多少文件
     echo n | COPY/-y "%%a" %OLDDIR%

我试过像

这样的东西
@echo off

set OLDDIR=%CD%

set /a UPCOUNT=0
set /a TOTALCOUNT=0
set /a DUBCOUNT=0

setlocal ENABLEDELAYEDEXPANSION

cd /d E:\Music
   for /r %%a in (*.m4a) do (
     set /a TOTALCOUNT=!TOTALCOUNT!+1
   )

   for /r %%a in (*.m4a) do (
     set copyCommand="echo n | COPY/-y "%%a" %OLDDIR%"
     for /f "tokens=1" %%b in ('%copyCommand% ^| findstr /c:"fil(er) kopieret."') do set fileCnt=%%b"
     if "!fileCnt!"==1 (set /a DUBCOUNT=!DUBCOUNT!+1)
     set /a UPCOUNT=!UPCOUNT!+1 
     cls
     echo !UPCOUNT! / !TOTALCOUNT! - !DUBCOUNT! dubs
   )

endlocal

可悲的是没有工作,我离开了我的舒适区:-P

有什么想法吗?

" fil(er)kopieret。"是因为我的操作系统是丹麦语; - )

1 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"

set /a UPCOUNT=0
set /a TOTALCOUNT=0
SET /a skipcount=0

pushd %sourcedir%
for /r %%a in (*.csv) do (
 set /a TOTALCOUNT+=1
)

for /r %%a in (*.csv) do (
 IF EXIST "%destdir%\%%~nxa" (SET /a skipcount +=1) ELSE (
  COPY "%%a" %destdir%\
  set /a UPCOUNT+=1
 )
 cls
 echo !UPCOUNT! / !TOTALCOUNT! !skipcount! skipped
)
popd

GOTO :EOF

我更改了目录和文件掩码,以适应我的系统和一些技巧,以适应我喜欢的风格。

关键是if exist语句,使用元变量~nx上的%%a修饰符来确定目标文件是否存在,以提取名称和扩展名。

请参阅docco提示中的for /?