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

[文件操作] [已解决]迅雷已完成文件复制到Bitcomt过程中变量和语法的问题

本帖最后由 thp2008 于 2023-9-19 16:29 编辑

我让Ai给我写了个将迅雷已下载完成的部分(跳过所有.bt.xltd文件),复制到BitComet 继继续下载,同时删除BitComet 同目录下的同名.bc!文件。
1、但是Ai始终写的,都没办法,成功跳过所有.bt.xltd文件
2、就是删除BitComet 同目录下的同名.bc!文件,Ai所始终处理不了.bc!后面这个感叹号。所以无法成功删除。
3、最好帮我加一个判断,就是迅雷已下载完成的,BitComet也完成了的,这种就跳过,不要复制了。也就是,第一段,得出的文件名,加多一个判断,如果在Bitcomt中也存在,并且没有.bc!那就跳过。
Ai也没那么聪明,有些东西,还是要靠各位高手。
帮我看看,修复这些问题。谢谢!
  1. @echo off
  2. title 将迅雷已下载完成的部分,复制到BitComet 继继续下载,同时删除BitComet 同名.bc!文件。
  3. setlocal enabledelayedexpansion
  4. set xl=F:\XunLei\原创精品电影1000GB电影
  5. set bt=E:\BitComet\原创精品电影1000GB电影
  6. echo.
  7. rem 递归复制文件和目录结构,排除%xl%目录下的*.bt.xltd文件
  8. echo 正在检查并移动文件...
  9. for /r "%xl%" %%i in (*) do (
  10.     set "exclude=%%i"
  11.     if "!exclude!" neq ".bt.xltd" (
  12.         set "source=%%i"
  13.         set "destination=!source:%xl%=%bt%!"
  14.         for %%d in (!destination!) do (
  15.             set "destination=%%~dpd"
  16.         )
  17. rem 检查BitComet目录是否存在同名的.bc!文件
  18. set "bcfile=!destination!%%~nxi.bc^!"
  19.         if exist "!bcfile!" (
  20.             echo 删除已存在的.bc!文件: !bcfile!
  21.             del "!bcfile!"
  22.         )
  23.         rem 创建目标目录(如果不存在)
  24.         if not exist "!destination!" (
  25.             mkdir "!destination!"
  26.         )
  27.         rem 复制文件到目标目录
  28.         copy "!source!" "!destination!"
  29.     )
  30. )
  31. echo.
  32. echo 文件移动完成!
  33. pause
  34. endlocal
复制代码
1

评分人数

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

回复 1# thp2008


请把迅雷和BitComet的目录结构打包上传到网盘
1、全部使用0字节空文件,只需要文件名说清楚对应关系即可
2、包含顶楼描述的所有场景
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

https://netcut.cn/bathome
打开后,在中间,选“文件(1个)”下载链接在下面

TOP

回复 3# thp2008


请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
  1. @echo off
  2. set "xl=F:\XunLei\原创精品电影1000GB电影"
  3. set "bt=E:\BitComet\原创精品电影1000GB电影"
  4. echo 正在检查并移动文件...
  5. for /f "delims=" %%i in ('dir /b /s /a-d "%xl%" ^| findstr /v /i /e /c:".bt.xltd"') do (
  6.     set "SourceFolder=%%~dpi"
  7.     set "SourceFile=%%~nxi"
  8.     set "bcfile=%%~nxi.bc!"
  9.     setlocal enabledelayedexpansion
  10.     set "DestinationFolder=!SourceFolder:%xl%=%bt%!"
  11.     if exist "!DestinationFolder!" (
  12.         if exist "!DestinationFolder!!SourceFile!" (
  13.             REM 检查BitComet目录是否存在同名的.bc!文件
  14.             if exist "!DestinationFolder!!bcfile!" (
  15.                 del /f /q "!DestinationFolder!!bcfile!"
  16.                 copy /y "!SourceFolder!!SourceFile!" "!DestinationFolder!"
  17.             )
  18.         ) else (
  19.             copy /y "!SourceFolder!!SourceFile!" "!DestinationFolder!"
  20.         )
  21.     ) else (
  22.         md "!DestinationFolder!"
  23.         copy /y "!SourceFolder!!SourceFile!" "!DestinationFolder!"
  24.     )
  25.     endlocal
  26. )
  27. pause
复制代码
1

评分人数

    • thp2008: 帮谢Batcher的帮助,目前人类还是比厉害技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

xcopy /t 可以复制文件结构,而不复制文件,这样在后面时候可以少个判断
  1. @echo off
  2. set "xl=F:\XunLei\原创精品电影1000GB电影\"
  3. set "bt=E:\BitComet\原创精品电影1000GB电影\"
  4. xcopy "%xl%" "%bt%" /T /Y
  5. for /f "delims=" %%i in ('dir /a-d /b /s "%xl%"^|findstr /ilve ".bt.xltd"') do (
  6.      set "exclude=%%i"
  7.      setlocal enabledelayedexpansion
  8.      for /f "delims=" %%a in ("!exclude:%xl%=%bt%!") do (
  9.           endlocal
  10.           if exist "%%a.bc!" del "%%a.bc!"
  11.            if not exist "%%a" copy "%%i" "%%a" /b /y
  12.      )
  13. )
  14. pause
复制代码
1

评分人数

    • thp2008: 满足要求,测试通过。感谢帮助!技术 + 1

TOP

回复  thp2008


请参考Q-04把bat文件保存为ANSI编码:
Batcher 发表于 2023-9-19 14:49


感谢老大,我测试了一下,基本上可行,只是有一点小逻辑性问题:

就是我需要运行两次这个批处理才能满足要求,第一次,不能删除,复制过去的文件.bc!
再运行一次就删除了。但是两次运行都会再复制一次,测试的小文件,没关系,但是大文件,就很浪费时间。我根据你提供的代码 ,修改了一下,已经可以了。
  1. @echo off
  2. set "xl=F:\XunLei\原创精品电影1000GB电影"
  3. set "bt=E:\BitComet\原创精品电影1000GB电影"
  4. echo 正在检查并移动文件...
  5. for /f "delims=" %%i in ('dir /b /s /a-d "%xl%" ^| findstr /v /i /e /c:".bt.xltd"') do (
  6.     set "SourceFolder=%%~dpi"
  7.     set "SourceFile=%%~nxi"
  8.     set "bcfile=%%~nxi.bc!"
  9.     setlocal enabledelayedexpansion
  10.     set "DestinationFolder=!SourceFolder:%xl%=%bt%!"
  11.     if not exist "!DestinationFolder!" md "!DestinationFolder!"
  12.     if exist "!DestinationFolder!!bcfile!" (
  13.         echo 删除BitComet目录已存同名的.bc!文件: "!DestinationFolder!!bcfile!"
  14.         del /f /q "!DestinationFolder!!bcfile!"
  15.     )
  16.     if not exist "!DestinationFolder!!SourceFile!" (
  17.     echo   开始复制文件: "!SourceFolder!!SourceFile!" "!DestinationFolder!"
  18.         copy /y "!SourceFolder!!SourceFile!" "!DestinationFolder!"
  19.     )
  20.    
  21.     endlocal
  22. )
  23. pause
复制代码

TOP

其实,在这种案例中,不需要考虑目录结构,因为BitComet在下载开始的时候,将所有目录结构都创建完成了,只是迅雷才会下一点,建一点。但是我是要求从迅雷复制到BitComet单向复制,所以就不用考虑到建目录结构,也没有关系,是我没有讲请楚,我之前的版本,Ai帮我自动做上去的,它也可能不清楚,是这么回事。

TOP

  1. @echo off
  2. set "f1=d:\XunLei"
  3. set "f2=d:\BitComet"
  4. robocopy "%f1%" "%f2%" /s /xc /xn /xo /xf *.bt.xltd
  5. for /r "%f2%" %%i in (*.bc!) do (
  6. if exist "%%~dpni" (
  7. del "%%i"
  8. )
  9. )
  10. pause & exit
  11. xunlei
  12. 1221.txt.bt.xltd
  13. 更多电影下载请进www..com.rar
  14. bitcomt
  15. 1221.txt.bc!
  16. 更多电影下载请进www..com.rar.bc!
复制代码
bat小白,请多指教!谢谢!

TOP

返回列表