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

[文件操作] 批处理如何查找大小为0的文件并替换?

[复制链接]
发表于 2022-1-19 10:15:43 | 显示全部楼层 |阅读模式
我有两个U盘A和B,其中一个U盘A当时拷进去很多大小为0的文件,现在想用批处理找出来,并用另一个U盘B里面的同名文件、并且大小不是0的文件替换(包含子目录),谢谢
发表于 2022-1-19 13:21:43 | 显示全部楼层
回复 1# ww0000
  1. @echo off
  2. REM 指定U盘A的所在的盘符
  3. set "U_A=X:"
  4. REM 指定U盘B的所在的盘符
  5. set "U_B=Y:"

  6. if not exist "%U_A%" (
  7.     echo 不存在 %U_A%
  8.     goto :End
  9. )
  10. if not exist "%U_B%" (
  11.     echo 不存在 %U_B%
  12.     goto :End
  13. )
  14. for /f "delims=" %%i in ('dir /b /s /a-d "%U_A%"') do (
  15.     if %%~zi equ 0 (
  16.         if exist "%U_B%%%~pnxi" (
  17.             copy /y "%U_B%%%~pnxi" "%%~dpi"
  18.         )
  19.     )
  20. )

  21. :End
  22. pause
复制代码
 楼主| 发表于 2022-1-20 17:34:12 | 显示全部楼层
回复 2# Batcher
谢谢老师,晚上我测试一下!
另外,如果我想把大的文件覆盖小的,或者是新的覆盖旧的,代码怎么改呢?
 楼主| 发表于 2022-1-20 17:40:27 | 显示全部楼层
回复 2# Batcher


    REM 指定U盘A的所在的盘符

老师,这里怎么改呀?
发表于 2022-1-20 19:16:04 | 显示全部楼层
回复 4# ww0000


    你把两个U盘同时插到电脑上之后看看盘符分别是什么,修改第3行和第5行。
 楼主| 发表于 2022-1-20 20:58:11 | 显示全部楼层
回复 5# Batcher


   比如说我的U盘是K:/   
第三行  set "U_A=X:"  修改成  set "K:/ "   ?
发表于 2022-1-20 20:59:47 | 显示全部楼层
回复 6# ww0000


     set "U_A=K:"
 楼主| 发表于 2022-1-25 14:46:40 | 显示全部楼层
回复 7# Batcher
老师,我在一个盘里的两个文件夹试验,文件夹1的文件是有内容的,文件夹2的文件是空的,试了不成功

    @echo off
REM 指定U盘A的所在的盘符
set "U_A=k:/1"
REM 指定U盘B的所在的盘符
set "U_B=k:/2"

if not exist "%U_A%\" (
    echo 不存在 %U_A%
    goto :End
)
if not exist "%U_B%\" (
    echo 不存在 %U_B%
    goto :End
)
for /f "delims=" %%i in ('dir /b /s /a-d "%U_A%"') do (
    if %%~zi equ 0 (
        if exist "%U_B%%%~pnxi" (
            copy /y "%U_B%%%~pnxi" "%%~dpi"
        )
    )
)

:End
pause
发表于 2022-1-25 15:59:54 | 显示全部楼层
回复 8# ww0000


    因为这个代码最初的编写思路是为了满足顶楼要求的【两个U盘A和B】,而不是现在你尝试的【一个U盘下的两个文件夹】
发表于 2022-1-25 16:10:00 | 显示全部楼层
回复 8# ww0000
  1. @echo off
  2. REM 指定第1个文件夹(包含空文件)的路径
  3. set "U_A=K:\1"
  4. REM 指定第2个文件夹(不包含空文件)的路径
  5. set "U_B=K:\2"

  6. setlocal enabledelayedexpansion
  7. if not exist "%U_A%" (
  8.     echo 不存在 %U_A%
  9.     goto :End
  10. )
  11. if not exist "%U_B%" (
  12.     echo 不存在 %U_B%
  13.     goto :End
  14. )
  15. for /f "delims=" %%i in ('dir /b /s /a-d "%U_A%"') do (
  16.     if %%~zi equ 0 (
  17.         set "FileA=%%i"
  18.         set "FileB=!FileA:%U_A%=%U_B%!"
  19.         if exist "!FileB!" (
  20.             copy /y "!FileB!" "%%~dpi"
  21.         )
  22.     )
  23. )

  24. :End
  25. pause
复制代码
 楼主| 发表于 2022-1-26 11:32:23 | 显示全部楼层
回复 10# Batcher


    老师,测试不成功
发表于 2022-1-26 16:41:40 | 显示全部楼层
回复 11# ww0000


建议以后不要再说“不行”、“一闪而过”、“没有反应”之类的话,因为这对于想要给你进一步帮助的人来说没有任何意义。希望大家都能学会的一个知识点是:如何查看代码的报错信息。

请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
 楼主| 发表于 2022-1-28 14:30:16 | 显示全部楼层
回复 12# Batcher


    只提示“请按任意键继续”,按了就没了
发表于 2022-1-28 17:17:50 | 显示全部楼层
回复 13# ww0000


    请按照12楼链接里面的方法操作,截图发出来看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 12:45 , Processed in 0.021782 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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