Board logo

标题: [文件操作] 批处理如何查找大小为0的文件并替换? [打印本页]

作者: ww0000    时间: 2022-1-19 10:15     标题: 批处理如何查找大小为0的文件并替换?

我有两个U盘A和B,其中一个U盘A当时拷进去很多大小为0的文件,现在想用批处理找出来,并用另一个U盘B里面的同名文件、并且大小不是0的文件替换(包含子目录),谢谢
作者: Batcher    时间: 2022-1-19 13:21

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

作者: ww0000    时间: 2022-1-20 17:34

回复 2# Batcher
谢谢老师,晚上我测试一下!
另外,如果我想把大的文件覆盖小的,或者是新的覆盖旧的,代码怎么改呢?
作者: ww0000    时间: 2022-1-20 17:40

回复 2# Batcher


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

老师,这里怎么改呀?
作者: Batcher    时间: 2022-1-20 19:16

回复 4# ww0000


    你把两个U盘同时插到电脑上之后看看盘符分别是什么,修改第3行和第5行。
作者: ww0000    时间: 2022-1-20 20:58

回复 5# Batcher


   比如说我的U盘是K:/   
第三行  set "U_A=X:"  修改成  set "K:/ "   ?
作者: Batcher    时间: 2022-1-20 20:59

回复 6# ww0000


     set "U_A=K:"
作者: ww0000    时间: 2022-1-25 14:46

回复 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
作者: Batcher    时间: 2022-1-25 15:59

回复 8# ww0000


    因为这个代码最初的编写思路是为了满足顶楼要求的【两个U盘A和B】,而不是现在你尝试的【一个U盘下的两个文件夹】
作者: Batcher    时间: 2022-1-25 16:10

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

作者: ww0000    时间: 2022-1-26 11:32

回复 10# Batcher


    老师,测试不成功
作者: Batcher    时间: 2022-1-26 16:41

回复 11# ww0000


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

请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
作者: ww0000    时间: 2022-1-28 14:30

回复 12# Batcher


    只提示“请按任意键继续”,按了就没了
作者: Batcher    时间: 2022-1-28 17:17

回复 13# ww0000


    请按照12楼链接里面的方法操作,截图发出来看看。




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