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

[文件操作] [已解决]拖拉文件到bat脚本执行复制到指定目录代码修改求助

[复制链接]
发表于 2023-3-16 00:36:26 | 显示全部楼层 |阅读模式
用ChatGPT生成了拖拉文件到bat执行复制到指定目录的代码。
生成了2个不同的代码:
代码1 只可以复制单个文件、目录可以保持原目录结构复制到指定目录;
代码2 可以复制多个文件、目录只把下一层的内容复制到指定目录。
请教一下大佬们要怎么修改代码2能解决目录不改变结构复制到指定目录?谢谢


代码1,文件只能单个复制,目录能保持原结构复制。
  1. @echo off
  2. setlocal

  3. rem check if the script received a valid file or directory path
  4. if not "%~1"=="" (
  5.     set "source=%~1"
  6. ) else (
  7.     echo No file or directory path specified.
  8.     pause
  9.     exit /b 1
  10. )

  11. rem check if the source path exists
  12. if not exist "%source%" (
  13.     echo The source path does not exist: %source%
  14.     pause
  15.     exit /b 1
  16. )

  17. rem create or validate the test directory
  18. set "testdir=E:\test"
  19. if not exist "%testdir%" (
  20.     md "%testdir%"
  21. )

  22. rem copy the file or directory to the test directory
  23. if exist "%source%\*.*" (
  24.     xcopy /E /Y "%source%" "%testdir%\%~nx1"
  25. ) else (
  26.     copy /Y "%source%" "%testdir%"
  27. )

  28. echo Successfully copied %source% to %testdir%
  29. pause
  30. exit /b
复制代码
代码2,可以复制多个文件,目录只复制下一层内容到目标目录。
  1. @echo off
  2. set "dest=E:\test"

  3. :loop
  4. IF "%~1"=="" GOTO done
  5. IF EXIST "%dest%\%~nx1" (
  6.     set /p overwrite="File %~nx1 already exists in destination folder. Overwrite? (y/n): "
  7.     IF /i "%overwrite%"=="y" (
  8.         copy /y "%~1" "%dest%"
  9.         shift
  10.         Goto loop
  11.     ) ELSE (
  12.         shift
  13.         Goto loop
  14.     )
  15. ) ELSE (
  16.     copy /y "%~1" "%dest%"
  17.     shift
  18.     Goto loop
  19. )

  20. :done
  21. echo File(s) copied to %dest%
  22. exit
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-3-16 07:22:39 | 显示全部楼层
本帖最后由 77七 于 2023-3-16 07:30 编辑

如果不需要判断是否已存在于目的文件夹,试试这样行吗
  1. @echo off
  2. set "test=D:\123"
  3. for %%a in (%*) do (
  4.         if exist "%%a" (
  5.                 robocopy "%%a" "%test%\%%~nxa" /e
  6.         ) else (
  7.                 robocopy "%cd%" "%test%" "%%~nxa"
  8.         )
  9. )
  10. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2023-3-16 09:03:19 | 显示全部楼层
如果不需要判断是否已存在于目的文件夹,试试这样行吗
77七 发表于 2023-3-16 07:22



   非常感谢大佬,完美解决。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 05:00 , Processed in 0.010381 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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