2

我有一个非常简单的批处理文件,它将一个目录中的所有 txt 文件复制到另一个位置。我想检查一下,如果目录中文件大小的总和超过 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
4

2 回答 2

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那么您将获得文件列表。
查看下面几行,您会看到其中包含“File(s)”的行,该数字就是上面的代码提取的内容。

这通过删除逗号改进了数字比较,但请注意,它最多只能工作 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
于 2013-10-23T12:18:19.740 回答
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 
于 2013-10-23T12:23:23.893 回答