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

[文件操作] 【已解决】如何复制文件夹的所有文件(支持排除特定文件夹、扩展名)?

本帖最后由 xzwcn 于 2019-10-15 19:01 编辑

例如:当前在E盘根目录,有文件夹App(里面包含Log、Bin、.git,.vs等文件夹,*.scc,*.log,*.config,*.html,*.js等文件)。
如何实现打开批处理,输入(或拖入)文件夹路径(例如这里是:E:\App\),回车后,
在E盘根目录(即当前文件夹)得到:App2(不要Log、Bin、.git,.vs文件夹、*.scc、*.log,*.config文件)?

不过滤.git里的文件类型的话 那就二步吧
排除文件看来也不行 因为你的.git目录是要全部复制的

TOP

回复 22# terse

加E,复制出来的文件夹是空的。非.git目录的文件夹出生成了,也是空的。

TOP

本帖最后由 terse 于 2019-10-14 22:17 编辑

回复 21# xzwcn
怎么回事 刚刚试了 我这边隐藏文件夹可以复制的啊
不过没有你要的文件类型的话 那就复制空文件夹 加 /E 看看

TOP

本帖最后由 xzwcn 于 2019-10-14 22:01 编辑

回复 20# terse
  1. @echo off
  2. set /p SourcePath=请输入或拖入源文件夹路径:
  3. set TargerPath=%SourcePath%1
  4. md "%TargerPath%">nul
  5. ROBOCOPY "%SourcePath%" "%TargerPath%" *.config *.gitattributes *.gitignore Log /XD .vs Bin obj /S
  6. ::ROBOCOPY "%SourcePath%"\.git "%TargerPath%"\.git /S /E
  7. pause
复制代码
源路径下是有.git的文件夹(属性是隐藏),执行后得到的文件夹里没有.git目录(因为里面没有*.config *.gitattributes *.gitignore的文件),我是希望不要过滤.git里的文件类型,整个复制出来。

TOP

回复 19# xzwcn
你不排除的话 可以复制的吧

TOP

回复 18# terse

应该是我表达得不好,.git是目录,不是文件,我是希望复制整个.git目录。

TOP

本帖最后由 terse 于 2019-10-14 21:32 编辑

回复 17# xzwcn
是我理解能力差吗 你最终想实现怎样的效果?
是复制.git后缀的文件 而不复制.git目录吗
你最后的又复制了.git 目录是不是

TOP

回复 16# terse
一次我不知道怎么实现

TOP

回复 15# xzwcn
为什么要两次?

TOP

本帖最后由 xzwcn 于 2019-10-14 18:44 编辑

回复 14# terse
  1. @echo off
  2. set /p SourcePath=请输入或拖入源文件夹路径:
  3. set TargerPath=%SourcePath%1
  4. md "%TargerPath%">nul
  5. ROBOCOPY "%SourcePath%" "%TargerPath%" *.git *.config *.gitattributes *.gitignore Log /XD .vs Bin obj /S
  6. ROBOCOPY "%SourcePath%"\.git "%TargerPath%"\.git /S /E
  7. pause
  8. pause
复制代码
谢谢提醒,这样可以复制到指定的文件,如果是.git目录,则不过滤文件类型,全部复制,可以只用一次ROBOCOPY 么?
上面用两次ROBOCOPY ,可以实现,我想优化一下。

TOP

回复 12# xzwcn
用ROBOCOPY试试吧
  1. @echo off
  2. set /p SourcePath=请输入或拖入源文件夹路径:
  3. set TargerPath=%SourcePath%2
  4. md "%TargerPath%">nul
  5. ROBOCOPY "%SourcePath%" "%TargerPath%" /XF *.scc *.log *.config *.gitattributes *.gitignore *.publishproj /XD log Bin .git /s /e
  6. pause
复制代码
/XF 排除的文件类型  /XD 排除的目录

TOP

回复 10# terse
  1. @echo off
  2. set /p SourcePath=请输入或拖入要清理的文件夹路径:
  3. set TargerPath=%SourcePath%1
  4. set TempFile=tempFile1
  5. (for %%i in (.config .gitattributes .gitignore \.git\ \.vs\ \log\) do echo %%i)>%TempFile%
  6. md %TargerPath%>nul
  7. xcopy %SourcePath% %TargerPath% /E /H /R /Y /EXCLUDE:%TempFile% rem:【注意】EXCLUDE需要修改
  8. del %TempFile%
  9. pause
复制代码
另外,和前面的反过来,只复制指定的文件夹、文件(文件层次结构不变),EXCLUDE需要怎么修改?

TOP

回复 10# terse

你好,还有个问题请教下,如何处理文件名与目录名后缀相同的问题?
例如我是希望排除.config的文件,但不要排除以.config为后缀的文件夹,要怎么修改代码?

TOP

回复 10# terse


谢谢!
我改成了变量,可拖入:
  1. @echo off
  2. set /p SourcePath=请输入或拖入源文件夹路径:
  3. set TargerPath=%SourcePath%2
  4. set TempFile=tempFile
  5. (for %%i in (.scc .log .config .vssscc .gitattributes .gitignore .publishproj .vspscc \log\ \Bin\ \.git\ \.vs\) do echo %%i)>%TempFile%
  6. md %TargerPath%>nul
  7. xcopy %SourcePath% %TargerPath% /E /H /R /Y /EXCLUDE:%TempFile%
  8. del %TempFile%
  9. pause
复制代码

TOP

返回列表