Board logo

标题: [数值计算] 批处理如何统计复制文件的数量? [打印本页]

作者: sw_lwb    时间: 2010-12-26 15:10     标题: 批处理如何统计复制文件的数量?

本帖最后由 pcl_test 于 2016-8-10 18:29 编辑

我有一批处理如下:
==============================================
@echo off
for /f "delims=" %%i in ('dir/a-d/b') do (
echo %%i|findstr "ex" &&copy %%i \\192.168.20.2\Report\dj
echo %%i|findstr "花肥" &&copy %%i \\192.168.20.2\Report\jj
echo %%i|findstr "亚欧" &&copy %%i \\192.168.20.2\Report\jj
echo %%i|findstr "敖德萨" &&copy %%i \\192.168.20.2\Report\jj
echo 按任意键退出
==============================================
功能是根据文件名复制文件到网络共享文件夹里。现在我想请教如何在复制完文件后显示复制文件的数量?
作者: tmplinshi    时间: 2010-12-26 15:56

  1. @echo off
  2. for /f "delims=" %%i in ('dir /a:-d /b') do (
  3.     echo "%%i" | findstr "ex" && (
  4.         copy "%%i" \\192.168.20.2\Report\dj
  5.         set /a n += 1
  6.     )
  7.     echo "%%i" | findstr "花肥 亚欧 敖德萨" && (
  8.         copy "%%i" \\192.168.20.2\Report\jj
  9.         set /a n += 1
  10.     )
  11. )
  12. echo 复制了 %n% 个文件
  13. echo 按任意键退出
  14. pause
复制代码
建议用以下代码,虽然代码比你原来的多,但是速度快一点。
(以下代码不能统计复制数量。。)
  1. @echo off
  2. for /f "delims=" %%i in ('dir /a:-d /b') do (
  3.     set var=%%i
  4.     SetLocal EnableDelayedExpansion
  5.     if "!var:ex=!" neq "!var!" (
  6.         copy "!var!" \\192.168.20.2\Report\dj
  7.         set /a n += 1
  8.     )
  9.     for %%a in (花肥 亚欧 敖德萨) do (
  10.         if "!var:%%a=!" neq "!var!" (
  11.             copy "!var!" \\192.168.20.2\Report\jj
  12.             set /a n += 1
  13.         )
  14.     )
  15.     EndLocal
  16. )
  17. echo 复制了 %n% 个文件
  18. echo 按任意键退出
  19. pause >nul
复制代码


[ 本帖最后由 tmplinshi 于 2010-12-26 17:40 编辑 ]
作者: sw_lwb    时间: 2010-12-26 16:16

原帖由 tmplinshi 于 2010-12-26 15:56 发表
@echo off
for /f "delims=" %%i in ('dir /a:-d /b') do (
    echo "%%i" | findstr "ex" && (
        copy "%%i" \\192.168.20.2\Report\dj
        set /a n += 1
    )
    echo "%%i" | findstr "花肥  ...


非常感谢,版主的热心帮助。
作者: hanyeguxing    时间: 2010-12-26 16:40     标题: 回复 2楼 的帖子

第2楼第个代码:两个 set /a n += 1 都位于 SetLocal EnableDelayedExpansion 和 EndLocal 区间,他们的数值 n 在每个循环结束时被清空
作者: 随风    时间: 2010-12-26 17:01

这么多 findstr 影响效率啊,直接用dir 的通配符来过滤不可以吗
2楼的第二个代码直接省略了过滤部分,不合题意了吧?

[ 本帖最后由 随风 于 2010-12-26 17:02 编辑 ]
作者: tmplinshi    时间: 2010-12-26 17:38     标题: 回复 5楼 的帖子

是的,我偶尔会犯这个错误。。那个方法只能改用临时文件,或不兼容英文感叹了。

直接 dir 的方法也不错。
  1. @echo off
  2. for %%a in (*ex*) do (
  3.     copy "%%a" \\192.168.20.2\Report\dj
  4.     set /a n += 1
  5. )
  6. for %%a in (*花肥*  *亚欧* *敖德萨*) do (
  7.     copy "%%a" \\192.168.20.2\Report\jj
  8.     set /a n += 1
  9. )
  10. echo 复制了 %n% 个文件
  11. echo 按任意键退出
  12. pause >nul
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2