Board logo

标题: [文件操作] 请教批处理COPY命令怎样复制目录? [打印本页]

作者: engene    时间: 2021-8-26 14:54     标题: 请教批处理COPY命令怎样复制目录?

跪拜,跪拜,跪拜,先给各位大神请安,

能帮我写一些文件及文件夹复制的BAT吗?因为不能用XCOPY,只能用COPY命令,但是不知道怎么才能复制目录,并复制目录中的文件,特别是多重目录的,那位大神能帮帮我啊。

因为电脑加密的原因,不能用XCOPY命令,只能用COPY命令,以下代码只能复制文件夹及其子目录里的文件,但是不能复制目录,我想要的效果就是输入一个目录,然后再输入需要复制到的地址,然后这个目录及目录下面的文件都按照原有目录复制到新的地址,并保持原目录结构。
  1. @echo off
  2. set target_path=C:\Users\eee\Desktop\1
  3. set copy_target_path=D:\1
  4. set vcffile=*.*
  5. C:
  6. cd %target_path%
  7. for /f "delims=" %%s in ('dir /b/a-d/s "%target_path%"\"%vcffile%"') do (
  8. echo %%s
  9. copy /y "%%s" %copy_target_path%
  10. )
  11. pause
复制代码
大神帮忙啊,大神威武,大神万岁。
作者: cmd1152    时间: 2021-8-26 15:07

  1. @echo off
  2. set /p mlm=目录名
  3. set /p fz=复制到哪里
  4. copy %mlm% %mlm%\%fz%
复制代码

作者: Batcher    时间: 2021-8-26 15:11

回复 1# engene


    robocopy这个命令可以用吗?
作者: engene    时间: 2021-8-26 15:19

回复  engene


    robocopy这个命令可以用吗?
Batcher 发表于 2021-8-26 15:11


Robocopy这个也不行,只能是copy
作者: engene    时间: 2021-8-26 15:20

cmd1152 发表于 2021-8-26 15:07



大神哥,咋不行啊
作者: Batcher    时间: 2021-8-26 15:25

回复 5# engene


不行就对了。因为copy命令没有复制文件夹结构的功能。
你可以换个思路写代码:先在目标目录下创建相同的文件夹结构,再复制文件。
作者: engene    时间: 2021-8-26 15:27

回复  engene


不行就对了。因为copy命令没有复制文件夹结构的功能。
你可以换个思路写代码:先在目标 ...
Batcher 发表于 2021-8-26 15:25



嗯,这是最后的办法,太麻烦了,好几千个文件夹 ,不知道我是否可以先用dir .\ /s /b >filelist.txt获取文件夹及目录文件列表,不知道能不能根据这个列表用FOR一个一个复制呢?
作者: cmd1152    时间: 2021-8-26 15:29

回复 7# engene


   
几千个文件夹

    是什么目录....
作者: engene    时间: 2021-8-26 15:37

回复 8# cmd1152


    就是一般的电脑文件夹,一个文件夹里面有的有10到30个文件夹,这些文件夹下面又有很多,有的能达到7,8层级
作者: qixiaobin0715    时间: 2021-8-26 15:40

回复 9# engene
换个思路,为什么非要用批处理呢,如果是原样复制,直接复制粘贴即可。
作者: engene    时间: 2021-8-26 16:02

回复 10# qixiaobin0715


    因为加密的原因,正常的windows的复制粘贴操作没用啊,只用能dos的copy命令
作者: Batcher    时间: 2021-8-26 16:32

回复 7# engene


    可以,最直接的思路最有效。
作者: engene    时间: 2021-8-26 16:40

回复 12# Batcher


咋写代码呢,版主大人  跪拜,跪拜,跪拜
作者: qixiaobin0715    时间: 2021-8-26 17:18

本帖最后由 qixiaobin0715 于 2021-8-27 10:14 编辑

回复 1# engene
要下班了,来不及仔细检查,你先试试吧:
把文件夹复制到D:盘根目录下。
  1. @echo off
  2. set path1=C:\Users\eee\Desktop\1
  3. set path2=D:\1
  4. cd /d %path1%
  5. setlocal enabledelayedexpansion
  6. for /f "delims=" %%a in ('dir /b /s /ad') do (
  7.     set str=%%a
  8.     set str=%path2%!str:%cd%=!
  9.     if not exist "!str!" md "!str!"
  10.     if exist "%%a\*.*" copy "%%a\*.*" "!str!"
  11. )
  12. if exist "*.*" copy "*.*" "%path2%"
  13. pause
复制代码

作者: engene    时间: 2021-8-26 17:51

回复 14# qixiaobin0715


    谢谢大神,膜拜ing, 跪拜,
    测试了一下,运行完之后会在原文件夹生成一个"!str!"的文件夹,这个str的文件夹里面包含原文件夹下面文件夹里面的所有文件(不论几层),但是在D盘里没有,麻烦大神明天上班有时间再给看看呗,谢了谢了谢了。
作者: Batcher    时间: 2021-8-26 18:00

回复 1# engene
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "SrcFolder=C:\Users\eee\Desktop\1"
  4. set "DstFolder=D:\1"
  5. cd /d "%~dp0"
  6. copy /y "%SrcFolder%\*.*" "!DstFolder!\"
  7. for /f "delims=" %%i in ('dir /b /s /ad "%SrcFolder%"') do (
  8.     set "NewFolder=%%i"
  9.     set "NewFolder=%DstFolder%!NewFolder:%SrcFolder%=!"
  10.     if not exist "!NewFolder!" (
  11.         md "!NewFolder!"
  12.     )
  13.     copy /y "%%i\*.*" "!NewFolder!\"
  14. )
复制代码

作者: qixiaobin0715    时间: 2021-8-26 20:30

回复 15# engene
已修改。
尽量不要把批处理代码文件放在要处理的文件夹中。如果还不行,可以试试Bather的代码。
作者: newswan    时间: 2021-8-26 21:04

可以用 powershell vbs 之类的吗
作者: engene    时间: 2021-8-27 14:34

回复 16# Batcher

本人平生最羡慕能写代码的人,对于这种慷慨帮助别人的人,我更是羡慕,请让我叫你一声,大神,大神,大神,崇拜你。
完美运行,超级厉害,跪谢,跪谢。。。
作者: engene    时间: 2021-8-27 14:39

回复 17# qixiaobin0715


  超级厉害,修改后的完美了,原文件夹也不会生产str文件了,也能把根目录下的文件一块复制过去了,崇拜ing......

感谢大神帮忙,感谢,跪拜。。。




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