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

[文件操作] [已解决]批处理比较两目录的文件,将其中一方的文件删除的问题

本帖最后由 thp2008 于 2023-11-6 23:49 编辑

自已写了个比较A和B目录的批处理,弄了半天,死活不成功。大家帮我看看,是什么问题。

规则就是,如果B目录,存在A目录中,相同的文件名,就将B目录中的同名文件删除。
  1. @echo off
  2. setlocal
  3. set /p "A_dir=A目录路径: "
  4. set /p "B_dir=B目录路径: "
  5. echo.
  6. echo 删除清单如下:
  7. echo.
  8. for /r "%A_dir%" %%F in (*) do (
  9.     set "file=%%~nxF"
  10.     if exist "%B_dir%\!file!" (
  11.         echo %B_dir%\!file!
  12.     )
  13. )
  14. echo.
  15. set /p "confirm=请确认是否删除以上文件 (Y/N): "
  16. if /i "%confirm%"=="Y" (
  17.     echo 正在删除文件...
  18.     for /r "%A_dir%" %%F in (*) do (
  19.         set "file=%%~nxF"
  20.         if exist "%B_dir%\!file!" (
  21.             del "%B_dir%\!file!"
  22.         )
  23.     )
  24.     echo.
  25.     echo 删除完成。
  26. ) else (
  27.     echo 操作已取消。
  28. )
  29. endlocal
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. @echo off
  2. set "A_dir=A"
  3. set "B_dir=B"
  4. dir /b "%A_dir%" >ta.$
  5. dir /b "%B_dir%">tb.$
  6. for /f "delims=" %%i in ('findstr /ixg:tb.$ ta.$') do (
  7.      if exist t?.$ del t?.$
  8.      del "%B_dir%\ %%i"
  9. )
  10. pause
复制代码
1

评分人数

    • thp2008: 测试通过,感谢!技术 + 1

TOP

回复 1# thp2008


    你的测试目录结构、实际测试结果、报错信息(如果有),都发出来看看吧。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

试试将1楼代码13-15行

    if exist "%B_dir%\!file!" (
        echo %B_dir%\!file!
    )

换成

setlocal enabledelayedexpansion
    if exist "!B_dir!\!file!" (
        echo !B_dir!\!file!
    )
endlocal

26-28行的

        if exist "%B_dir%\!file!" (
            del "%B_dir%\!file!"
        )

换成

setlocal enabledelayedexpansion
        if exist "!B_dir!\!file!" (
            del "!B_dir!\!file!"
        )
endlocal
1

评分人数

    • thp2008: 原来是这么会事,弄了我半天。感谢!测试可 ...技术 + 1

TOP

本帖最后由 77七 于 2023-11-6 21:44 编辑
  1. setlocal
  2. endlocal
复制代码

这个是区域变量,没有开启变量延迟扩展
顶楼代码没有判断b是否存在于a吧


  1. @echo off
  2. set a=D:\a\
  3. set b=D:\a\b\
  4. rem 去掉末尾\
  5. for %%a in ("%b%\.") do set b=%%~fa
  6. for /r "%a%" /d %%d in (*) do (
  7. if /i "%%d" equ "%b%" (
  8. for %%a in ("%a%\*") do (
  9. if exist "%b%\%%~nxa" (
  10. if not exist "%b%\%%~nxa\" (
  11. echo del "%b%\%%~nxa"
  12. )
  13. )
  14. )
  15. )
  16. )
  17. pause
复制代码
bat小白,请多指教!谢谢!

TOP

  1. for /r "%A_dir%" %%F in (*) do (
  2.    for %%a in  ("%%~nxF") do (
  3.         if exist "%B_dir%\%%~nxa" (
  4.            echo "%B_dir%\%%~nxa"
  5.         )
  6.     )
  7. )
复制代码
1

评分人数

    • thp2008: 测试通过,感谢!技术 + 1

TOP

这个是区域变量,没有开启变量延迟扩展
顶楼代码没有判断b是否存在于a吧
77七 发表于 2023-11-6 21:39


这个我测了不行

TOP

回复 3# Batcher

弄了半天,也不报错,什么结果也没有,让Ai帮我写的,问了它半天,它也不知道怎么会事。只好上来问一下,发现Ai还是有很多搞不懂的,还是人靠谱。

TOP

本帖最后由 77七 于 2023-11-7 00:56 编辑

回复 8# thp2008




提问ai,需要准确描述问题

windows平台,如果A、B两个目录下存在文件名相同的文件,则删除B目录下的该文件,请写出批处理脚本

以下是一个Windows平台下的批处理脚本,用于删除B目录中存在的与A目录相同文件名的文件:


复制代码


  1. @echo off
  2. set "srcDir=A"
  3. set "dstDir=B"
  4. for %%F in ("%srcDir%\*") do (
  5.     if exist "%dstDir%\%%~nxF" (
  6.         del "%dstDir%\%%~nxF"
  7.         echo Deleted file: %%~nxF
  8.     )
  9. )
  10. pause
复制代码


请将脚本保存为.bat文件,并将A和B目录的路径替换为实际的目录。这个脚本会遍历A目录中的文件,在B目录中查找是否存在相同文件名的文件,如果存在则删除B目录中的该文件,并输出删除的文件名。最后的pause命令是为了使脚本执行完成后暂停,以便您查看输出结果。

1

评分人数

bat小白,请多指教!谢谢!

TOP

是的,用Ai写代码,尽量想清楚你的要求,描述清楚你的逻辑,逻辑的描述很重要,这样比较容易成功。3.5 也能用 ,4.0好很多。就是要钱
但是有些细节,它还是不行,而且在我使用近2月来看,写成功了近百个小工具,还是可以的,就是有时候,如果它不会的时候,怎么也理解不成功的时候,就比较麻烦,上次那个拼音替换,跟它反复推拉了8小时,它都没有搞定,才上来问了。有时候,我也想测试一下,它的能力,才花了很长时间,跟它聊。

TOP

返回列表