找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30415|回复: 5

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

[复制链接]
发表于 2010-12-26 15:10:17 | 显示全部楼层 |阅读模式
本帖最后由 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 按任意键退出
==============================================
功能是根据文件名复制文件到网络共享文件夹里。现在我想请教如何在复制完文件后显示复制文件的数量?
发表于 2010-12-26 15:56:18 | 显示全部楼层
  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 编辑 ]
 楼主| 发表于 2010-12-26 16:16:28 | 显示全部楼层
原帖由 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 "花肥  ...


非常感谢,版主的热心帮助。
发表于 2010-12-26 16:40:31 | 显示全部楼层

回复 2楼 的帖子

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

评分

参与人数 1技术 +1 收起 理由
tmplinshi + 1 啊 汗一下自己。。

查看全部评分

发表于 2010-12-26 17:01:03 | 显示全部楼层
这么多 findstr 影响效率啊,直接用dir 的通配符来过滤不可以吗
2楼的第二个代码直接省略了过滤部分,不合题意了吧?

[ 本帖最后由 随风 于 2010-12-26 17:02 编辑 ]
发表于 2010-12-26 17:38:42 | 显示全部楼层

回复 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 06:37 , Processed in 0.025800 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表