如果目录中的文件总数超过特定限制(批处理/ cmd),请运行命令

时间:2013-10-23 12:04:49

标签: batch-file cmd

我有一个非常简单的批处理文件,它将目录中的所有txt文件xcopys到另一个位置。我想检查一下,如果目录中的文件大小总和超过1mb,则复制将继续,否则退出。

我能做的另一件事就是单独检查每个文件,但所有文件的总和将是一个应该有效的粗略和现成的解决方案。

任何指针都会很棒,因为我不知道从哪里开始。

    rem @echo off
cd /d "c:\test"
for /f "tokens=3" %%a in ('dir /-c /-p ^|find "File(s)" ') do 
   if %%a GTR 1024 (
     echo %%a is more than enough
   ) else (
    echo %%a is less than 1024
   )



pause

2 个答案:

答案 0 :(得分:2)

这应该为您提供文件夹的总大小。

@echo off
cd /d "d:\target\folder"
for /f "tokens=3" %%a in ('dir /-c /-p ^|find "File(s)" ') do echo %%a
pause

如果您打开cmd提示并键入dir,则会获得文件列表 查看下面的几行,你会看到一行中包含“文件”,这个数字就是上面提到的代码。

这通过删除逗号来改进数字比较,但要注意它最多只能工作2 GB。

@echo off
cd /d "c:\some\dir"
for /f "tokens=3" %%a in ('dir /-c /-p ^|find "File(s)" ') do if %%a GTR 1024 echo output & pause

这是一个else子句:

@echo off
cd /d "c:\some\dir"
for /f "tokens=3" %%a in ('dir /-c /-p ^|find "File(s)" ') do (
   if %%a GTR 1024 (
     echo %%a is more than enough
   ) else ( 
     echo %%a is less than 1025
   )
)
pause

答案 1 :(得分:1)

cd some_dir
@for /f "tokens=3 delims=)b " %s in ('dir /s ^| find /i "File("') do @set size=%s
@set /a size=%size:,=%
set curr_dir=%cd%
cd ..
@if %size% GTR [LIMIT] xcopy "%curr_dir%" "[c:\destination]" /y /s /i /c /h