我做了一个短批来将我的音乐复制到我的车载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。"是因为我的操作系统是丹麦语; - )
答案 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 /?
。