Board logo

标题: [文件操作] 批处理如何将B路径下文件复制到A路径中? [打印本页]

作者: ednykissyou    时间: 2022-2-8 23:51     标题: 批处理如何将B路径下文件复制到A路径中?

要将B路径下文件复制到A路径中,如果A中无直接复制,如果A中有,比较,有改动才复制

我需要完成一项操作。
有两个文件夹:
A路径为:
C:\Program Files (x86)\Rime\weasel-0.14.5\data\opencc\

B路径为:
D:\Program Files (x86)\S-srf\Rime\liters\
这里边有B1、B2子文件夹(比如...\liters\B1\001.txt    ...\liters\B2\abc.json )

我现在想把B1、B2下的文件,复制到A的\opencc\内。(比如变成这样:...\opencc\001.txt   ...\opencc\abc.json)
复制之前,需要先比较一下:
  如果A内没有001.txt,abc.json,那直复制。
  如果A内已经存在相同的文件,那比较一下是否不一样(不用管谁更新),不一样则复制,一样则跳过不操作。

上边运行完。
即下来才执行某个程序(这里是C:\Program Files (x86)\Rime\weasel-0.14.5\WeaselDeployer.exe)
基实我的目的就是:不想将小狼毫输入法的滤镜放在opencc下,想放在Rime路径下好备份。

请大神们帮我写个批或vbs.
万分呢感谢~
作者: qixiaobin0715    时间: 2022-2-9 08:25

本帖最后由 qixiaobin0715 于 2022-2-9 13:44 编辑
  1. @echo off
  2. set "FD1=C:\Program Files (x86)\Rime\weasel-0.14.5\data\opencc"
  3. set "FD2=D:\Program Files (x86)\S-srf\Rime\liters"
  4. cd /d "%FD2%"
  5. for /f "delims=" %%i in ('dir /b /ad') do copy /y "%%i\*.*" "%FD1%"
  6. pause
复制代码

作者: Batcher    时间: 2022-2-9 09:14

回复 1# ednykissyou


复制之前,需要先比较一下,真实的意义是什么呢?
不管三七二十一,直接从B复制到A会有什么问题吗?
作者: Batcher    时间: 2022-2-9 09:54

回复 4# ednykissyou


如果单纯从语法的角度来说,可以在copy之前先用fc命令对比一下两个文件。
参考这个代码里面第17行:
https://mp.weixin.qq.com/s/DixV7t8KFySKNX974u2IBw
作者: ednykissyou    时间: 2022-2-9 14:15

回复 5# qixiaobin0715
2#qixiaobin0715正确 不用加引号
对不起~qixiaobin0715
你2楼的是对的,长路径上不加引号也是可以的。因为我的疏忽。
误将filter写成liter,结果让你浪费了很多时间。
为减少大家浪费时间看我的错误信息,我将已发的回复删了
作者: ednykissyou    时间: 2022-2-9 15:00

本帖最后由 ednykissyou 于 2022-2-9 15:16 编辑

回复 5# qixiaobin0715

我把另一贴中的自动FD2改为自动判断版本(BB)变化的路径。提示命令语法不正确了
  1. @echo off
  2. for /d %%i in ("C:\Program Files (x86)\Rime\weasel*") do set "BB=%%~i"
  3. set FD1=C:\Program Files (x86)\Rime\%BB%\data\opencc\
  4. set FD2=D:\Program Files (x86)\S-srf\Rime\filters\
  5. cd /d "%FD2%"
  6. for /f "delims=" %%i in ('dir /b /ad') do copy /y "%%i\*.*" "%FD1%"
  7. pause
复制代码
----------------晕炸了--------------------我好像晓得了
这里应该是:
  1. set FD1=%BB%\data\opencc\
复制代码
还有我想把批处理直接放在FD1的Rime下,直接用相对路径要咋整呢
下边这样就对了:
  1. @REM 先复制滤镜到opencc下
  2. @echo off
  3. for /d %%i in ("C:\Program Files (x86)\Rime\weasel*") do set "BB=%%~i"
  4. set FD1=%BB%\data\opencc\
  5. @REM 相对路径 要求本批处理直接放在Rime下
  6. set FD2=%cd%\filters\
  7. @REM 绝地路径
  8. @REM set FD2=D:\Program Files (x86)\S-srf\Rime\filters\
  9. cd /d "%FD2%"
  10. for /f "delims=" %%i in ('dir /b /ad') do copy /y "%%i\*.*" "%FD1%"
  11. pause
  12. @rem 重新部署
  13. @echo off
  14. for /d %%i in ("C:\Program Files (x86)\Rime\weasel*") do set "FD=%%~i"
  15. start "" "%FD%\WeaselDeployer.exe"
复制代码





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