标题: [文件操作] [已解决]批处理如何复制文件夹1到文件夹2? [打印本页]
作者: g495326 时间: 2024-4-18 18:34 标题: [已解决]批处理如何复制文件夹1到文件夹2?
本帖最后由 g495326 于 2024-4-19 11:29 编辑
场景:
在E盘有文件夹1和文件夹2,如何把文件夹1复制到文件夹2下面?
xcopy和robocopy我都尝试了,他们仅能复制文件,不能复制文件夹本身
作者: aloha20200628 时间: 2024-4-18 19:18
回复 1# g495326
须用 /i 参数 即可...- xcopy /s/f/i/y "e:\文件夹1" "e:\文件夹2\文件夹1\"
复制代码
作者: g495326 时间: 2024-4-18 21:16
回复 2# aloha20200628
大佬,不奏效呀
作者: fzp070 时间: 2024-4-18 22:04
本帖最后由 fzp070 于 2024-4-18 22:13 编辑
试试这样可以不,试了在我电脑是正常的,如果还是不行可能要看是否电脑其他方面原因了- robocopy "e:\文件夹1" "e:\文件夹2\文件夹1" /mir
复制代码
作者: g495326 时间: 2024-4-18 22:22
回复 4# fzp070
这个可以,但在脚本中文件夹1的名字是变动的,我怎么获取到它呢
作者: g495326 时间: 2024-4-18 22:23
回复 4# fzp070
源路径位于%1参数中
作者: g495326 时间: 2024-4-18 22:24
回复 4# fzp070
可能的情况,源路径以反斜杠结尾
作者: aloha20200628 时间: 2024-4-18 22:53
回复 3# g495326
2楼代码采用参数 /s 是确保目录 e:\1 为空时不作复制,若改为参数 /e 则可确保目录 e:\1 即使为空时也作复制,改用如下代码吧...- xcopy /e/f/i/y "e:\文件夹1" "e:\文件夹2\文件夹1\"
复制代码
作者: fzp070 时间: 2024-4-18 22:53
本帖最后由 fzp070 于 2024-4-18 22:58 编辑
源路径是变动的,那就从参数中提取吧。
作者: 77七 时间: 2024-4-18 23:43
- @echo off
- pushd "%~1"
- robocopy . "e:\2\%~nx1" /e
- popd
- pause
复制代码
作者: aloha20200628 时间: 2024-4-19 00:16
本帖最后由 aloha20200628 于 2024-4-19 00:20 编辑
回复 7# g495326
据6-7楼题意,假设命令行参数%1是源目录(用 \ 结尾);
代码第5行预设目标目录d2(可自定义)
- @echo off &setlocal
- set "d1=%~f1"
- if "%d1:~-1%"=="\" set "d1=%d1:~,-1%"
- for %%d in ("%d1%") do set "dn=%%~nxd"
- set "d2=e:\文件夹2"
- xcopy /e/f/i/y "%d1%" "%d2%\%dn%\"
- pause&exit/b
复制代码
作者: Batcher 时间: 2024-4-19 08:21
回复 5# g495326
请举例说明文件夹1的名字是如何变动的?
作者: g495326 时间: 2024-4-19 11:08
回复 10# 77七
源目录可能以反斜杠\结尾,这种情况%~nx1获取不到最深层目录名的
作者: g495326 时间: 2024-4-19 11:12
回复 12# Batcher
就是正常的目录名,但结尾可能存在反斜杠\,比如e:\1,e:\1\
作者: g495326 时间: 2024-4-19 11:28
回复 11# aloha20200628
对的,谢谢大佬
作者: 77七 时间: 2024-4-19 11:30
本帖最后由 77七 于 2024-4-19 11:45 编辑
回复 13# g495326
- @echo off
- pushd "%~1"
- call :1 "%cd%"
- pause & exit
-
- :1
- robocopy . "e:\2\%~nx1" /e
- exit /b
复制代码
- @echo off
- call :1 "%~1."
- pause & exit
-
- :1
- pushd "%~1"
- robocopy . "e:\2\%~nx1" /e
- popd
- exit /b
复制代码
作者: g495326 时间: 2024-4-19 11:53
回复 16# 77七
好思路,修改当前工作目录来处理反斜杠
作者: 77七 时间: 2024-4-19 14:44
由16楼%~1.引起的尝试- @echo off
- rem 不考虑含有空格的路径
- rem 执行成功
- robocopy d:\1\ d:\2\1\ /e
- robocopy "d:\1\." "d:\2\1\." /e
- robocopy "d:\1\." "d:\2\1." /e
- robocopy "d:\1." "d:\2\1." /e
-
- rem 执行失败
- robocopy "d:\1" "d:\2\1\" /e
- robocopy "d:\1\" "d:\2\1\" /e
- robocopy "d:\1\" "d:\2\1\." /e
- pause
复制代码
以前一直以为 robocopy "a" "b" ,a、b末尾不能有\,经过尝试发现,以后可以直接忽略是否有\,只需要在末尾加一个.号解决。
作者: Five66 时间: 2024-4-19 17:04
回复 18# 77七
不是末尾不能有\ , 而是robocopy是外部程序 , 参数解析中的\有转义作用 ,换成两个\就行了
例如 robocopy "a\" "b" 中的\"是转义" , robocopy接受到的源路径参数是 a" b, 不合法的 , 而且也没有目标路径参数
作者: 77七 时间: 2024-4-19 18:00
回复 19# Five66
- 开始时间: 2024年4月19日 17:45:11
- 源: d:\1" d:\2\1 \e\
- 目标-
复制代码
谢谢大佬指点!观察报告,确实如此。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |