Board logo

标题: [文件操作] 批处理怎样实现文件夹剪切替换? [打印本页]

作者: 星空独子    时间: 2019-11-22 15:01     标题: 批处理怎样实现文件夹剪切替换?

在返修3中含有文件夹试验1,试验2;在返修2中含有文件夹试验1,试验2,试验3;在返修1中含有文件夹试验1,试验2,试验3,试验4(最终的子文件夹中包含具体的文件)
目的:将返修3中包含的所有文件夹剪切并替换到返修2中,然后将返修2中包含的所有文件夹剪切并替换到返修1中,最后将返修1中包含的所有文件夹剪切并替换到根文件夹B50001-T1-19A中
各位大神,这样批量的剪切替换该如何实现。
作者: 星空独子    时间: 2019-11-22 20:31

本帖最后由 星空独子 于 2019-11-22 20:37 编辑

回复 1# 星空独子
  1. @echo off
  2. Xcopy "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A\返修3" "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A\返修2" /s /e /y
  3. Xcopy "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A\返修2" "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A\返修1" /s /e /y
  4. Xcopy "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A\返修1" "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A" /s /e /y
  5. rd "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A\返修3" /s /q
  6. rd "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A\返修2" /s /q
  7. rd "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A\返修1" /s /q
  8. pause
复制代码
我编出来了,但是还有一个小小的疑惑,就是如何简化,假如我这边出现了返修4,返修5,返修6等,如何从返修6替换返修5,再返修5替换返修4中子文件夹及文件。。。。。,意思就是返修N我不确定的情况下,如何编写更简单下,N可以通过自己赋值,感兴趣的可以讨论下
作者: Batcher    时间: 2019-11-22 20:56

回复 2# 星空独子
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=6
  4. for /l %%i in (%n%,-1,2) do (
  5.     set /a m=%%i-1
  6.     xcopy /s /e /y "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A\返修%%i" "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A\返修!m!"
  7.     rd /s /q "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A\返修%%i"
  8. )
  9. xcopy /s /e /y "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A\返修1" "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A"
  10. rd /s /q "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A\返修1"
复制代码

作者: 星空独子    时间: 2019-11-22 21:16

回复 3# Batcher

显示不可以,同时我在想能否将路径中相同的部分赋值给一个变量,这样会更简单些,bat小白,欢迎赐教(实际路径按照我图里的,这个不影响)
作者: Batcher    时间: 2019-11-22 21:41

回复 4# 星空独子


请参考Q-04解决乱码问题
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
作者: Batcher    时间: 2019-11-22 21:44

同时我在想能否将路径中相同的部分赋值给一个变量

试试这样:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=6
  4. cd /d "C:\Users\yuyu\Desktop\模拟试验\B50001-T1-19A"
  5. for /l %%i in (%n%,-1,2) do (
  6.     set /a m=%%i-1
  7.     xcopy /s /e /y "返修%%i" "返修!m!"
  8.     rd /s /q "返修%%i"
  9. )
  10. xcopy /s /e /y "返修1" .
  11. rd /s /q "返修1"
复制代码

作者: 星空独子    时间: 2019-12-2 15:34

回复 6# Batcher
对于现有的可实现的功能,能否做一下升级,n=子文件夹数量,以及cd /d 当前文件夹路径能否自动判断,而不是每次我自己重新填写
作者: Batcher    时间: 2019-12-2 16:21

回复 7# 星空独子
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. set n=0
  5. for /f %%i in ('dir /b /ad 返修*') do (
  6.     set /a n+=1
  7. )
  8. for /l %%i in (!n!,-1,2) do (
  9.     set /a m=%%i-1
  10.     xcopy /s /e /y "返修%%i" "返修!m!"
  11.     rd /s /q "返修%%i"
  12. )
  13. xcopy /s /e /y "返修1" .
  14. rd /s /q "返修1"
复制代码

作者: 星空独子    时间: 2019-12-3 11:54

回复 8# Batcher
在这个基础之上,假如我这里边存在如下文件夹,如何首先判断是否存在返修文件夹,如果存在的话,能否返修3替换返修2同名文件,返修2替换返修1同名文件,返修1替换返修同名文件,返修替换当前文件夹同名文件,
返修
返修1
返修2
返修3



返修N
作者: Batcher    时间: 2019-12-3 12:52

回复 9# 星空独子


    可能是我没看懂你的需求,能否说下8楼代码和9楼需求之间的差异在什么地方?
作者: 星空独子    时间: 2019-12-3 15:11

本帖最后由 星空独子 于 2020-3-23 20:37 编辑

回复 10# Batcher
除了规律的文件夹返修1,返修2...返修N,还有一个返修文件夹,这个文件夹内的版本要比返修1还要早(你就可以把它假象成返修0),但是有时候因为操作的问题,可能没有这个文件夹,就是这个文件夹因为人员关系可能随机存在。
这个新增的问题还是没解决,不知道哪里出了问题




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