Board logo

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

作者: thp2008    时间: 2023-11-6 20:21     标题: [已解决]批处理比较两目录的文件,将其中一方的文件删除的问题

本帖最后由 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
复制代码

作者: terse    时间: 2023-11-6 21:02

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

作者: Batcher    时间: 2023-11-6 21:03

回复 1# thp2008


    你的测试目录结构、实际测试结果、报错信息(如果有),都发出来看看吧。
作者: Five66    时间: 2023-11-6 21:16

试试将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
作者: 77七    时间: 2023-11-6 21:39

本帖最后由 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
复制代码

作者: terse    时间: 2023-11-6 22:03

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

作者: thp2008    时间: 2023-11-6 23:47

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


这个我测了不行
作者: thp2008    时间: 2023-11-6 23:51

回复 3# Batcher

弄了半天,也不报错,什么结果也没有,让Ai帮我写的,问了它半天,它也不知道怎么会事。只好上来问一下,发现Ai还是有很多搞不懂的,还是人靠谱。
作者: 77七    时间: 2023-11-7 00:54

本帖最后由 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命令是为了使脚本执行完成后暂停,以便您查看输出结果。


作者: thp2008    时间: 2023-11-7 13:24

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




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