[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 批处理如何统计复制文件的数量?

本帖最后由 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 按任意键退出
==============================================
功能是根据文件名复制文件到网络共享文件夹里。现在我想请教如何在复制完文件后显示复制文件的数量?

  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 编辑 ]

TOP

原帖由 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 "花肥  ...


非常感谢,版主的热心帮助。

TOP

回复 2楼 的帖子

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

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

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

[ 本帖最后由 随风 于 2010-12-26 17:02 编辑 ]
技术问题请到论坛发帖求助!

TOP

回复 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
复制代码

TOP

返回列表