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

[文件操作] [已解决]批处理如何复制文件夹1到文件夹2?

本帖最后由 g495326 于 2024-4-19 11:29 编辑

场景:
在E盘有文件夹1和文件夹2,如何把文件夹1复制到文件夹2下面?

xcopy和robocopy我都尝试了,他们仅能复制文件,不能复制文件夹本身
1

评分人数

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

回复 19# Five66



  1.   开始时间: 2024年4月19日 17:45:11
  2.         源: d:\1" d:\2\1 \e\
  3.       目标-
复制代码

谢谢大佬指点!观察报告,确实如此。
bat小白,请多指教!谢谢!

TOP

回复 18# 77七


    不是末尾不能有\  , 而是robocopy是外部程序 , 参数解析中的\有转义作用 ,换成两个\就行了
例如 robocopy "a\" "b" 中的\"是转义" , robocopy接受到的源路径参数是 a" b, 不合法的 , 而且也没有目标路径参数
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP

由16楼%~1.引起的尝试
  1. @echo off
  2. rem 不考虑含有空格的路径
  3. rem 执行成功
  4. robocopy d:\1\ d:\2\1\ /e
  5. robocopy "d:\1\." "d:\2\1\." /e
  6. robocopy "d:\1\." "d:\2\1." /e
  7. robocopy "d:\1." "d:\2\1." /e
  8. rem 执行失败
  9. robocopy "d:\1" "d:\2\1\" /e
  10. robocopy "d:\1\" "d:\2\1\" /e
  11. robocopy "d:\1\" "d:\2\1\." /e
  12. pause
复制代码


以前一直以为 robocopy "a" "b" ,a、b末尾不能有\,经过尝试发现,以后可以直接忽略是否有\,只需要在末尾加一个.号解决。
bat小白,请多指教!谢谢!

TOP

回复 16# 77七


    好思路,修改当前工作目录来处理反斜杠

TOP

本帖最后由 77七 于 2024-4-19 11:45 编辑

回复 13# g495326


  
  1. @echo off
  2. pushd "%~1"
  3. call :1 "%cd%"
  4. pause & exit
  5.         :1
  6.         robocopy . "e:\2\%~nx1" /e
  7.         exit /b
复制代码
  1. @echo off
  2. call :1 "%~1."
  3. pause & exit
  4. :1
  5. pushd "%~1"
  6. robocopy . "e:\2\%~nx1" /e
  7. popd
  8. exit /b
复制代码
1

评分人数

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

TOP

回复 11# aloha20200628


    对的,谢谢大佬

TOP

回复 12# Batcher


    就是正常的目录名,但结尾可能存在反斜杠\,比如e:\1,e:\1\

TOP

回复 10# 77七


    源目录可能以反斜杠\结尾,这种情况%~nx1获取不到最深层目录名的
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP

回复 5# g495326


    请举例说明文件夹1的名字是如何变动的?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 aloha20200628 于 2024-4-19 00:20 编辑

回复 7# g495326
据6-7楼题意,假设命令行参数%1是源目录(用 \ 结尾);
代码第5行预设目标目录d2(可自定义)
  1. @echo off &setlocal
  2. set "d1=%~f1"
  3. if "%d1:~-1%"=="\" set "d1=%d1:~,-1%"
  4. for %%d in ("%d1%") do set "dn=%%~nxd"
  5. set "d2=e:\文件夹2"
  6. xcopy /e/f/i/y "%d1%" "%d2%\%dn%\"
  7. pause&exit/b
复制代码
1

评分人数

TOP

  1. @echo off
  2. pushd "%~1"
  3. robocopy . "e:\2\%~nx1" /e
  4. popd
  5. pause
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 fzp070 于 2024-4-18 22:58 编辑

源路径是变动的,那就从参数中提取吧。

TOP

回复 3# g495326

2楼代码采用参数 /s 是确保目录 e:\1 为空时不作复制,若改为参数 /e 则可确保目录 e:\1 即使为空时也作复制,改用如下代码吧...
  1. xcopy /e/f/i/y "e:\文件夹1" "e:\文件夹2\文件夹1\"
复制代码

TOP

回复 4# fzp070


    可能的情况,源路径以反斜杠结尾

TOP

返回列表