Board logo

标题: [文件操作] [已解决]批处理如何实现文件替换? [打印本页]

作者: fish    时间: 2010-7-28 18:12     标题: [已解决]批处理如何实现文件替换?

题目如下:(又是自己瞎编的一道题,各位前辈莫笑哈)
当前目录下有A、B两个文件夹,A文件夹下循环嵌套了多层子目录,每个子目录中以及A文件夹下都可能有a.txt文件(注意也可能没有),B文件夹下有一个b.swf文件,现在想用批处理实现用B文件夹下的b.swf文件替换A文件夹下的所有a.txt文件,并且名字不要变,即替换完成后仍然是a.txt文件,由于要替换的文件可能过多,建议使用安静模式替换,请问各位前辈该如何是好?

[ 本帖最后由 fish 于 2010-7-31 00:45 编辑 ]
作者: wankoilz    时间: 2010-7-28 19:05

  1. @echo off
  2. for /r a\ %%i in (*.txt) do (
  3.       if %%~nxi==a.txt copy /y b\b.swf "%%~fi"
  4. )
复制代码

作者: fish    时间: 2010-7-28 20:33     标题: wankoilz前辈的代码还算好用。

请问前辈:
1、in中为什么不写a.txt,如果写a.txt是否不用if判断,直接copy就行了?
2、%%~nxi和"%%~fi"等增强变量不太明白用法,请详细解释,还有就是后者为什么用了""括起来,前者为什么不用呢?
3、copy的\y参数是否在脚本中默认存在呢?不写好像也不提示啊!
4、发现有一个最严重的问题,您这代码把没有a.txt的文件夹也给拷出a.txt了,这是我们不希望看到的结果。

[ 本帖最后由 fish 于 2010-7-28 20:48 编辑 ]
作者: terse    时间: 2010-7-29 02:11

如果确定B文件夹 没有a.txt的话 或许可以写个更简捷的代码
作者: fish    时间: 2010-7-29 02:18     标题: 回复 4楼 的帖子

我确定没有,真没有,还请前辈赐教!
作者: terse    时间: 2010-7-29 02:39

  1. @echo off
  2.   ren "c:\b\b.swf" "a.txt"
  3.   replace "c:\b\a.txt" "C:\a" /s >nul 2>nul
  4.   ren "c:\b\a.txt" "b.swf"
复制代码

作者: fish    时间: 2010-7-29 03:16     标题: 回复 6楼 的帖子

前辈的代码似乎有点问题,在我这里测试时,并没有替换文件啊,我把避错显示语句去掉,提示我找不到路径(当然路径我已经设好了),未替换文件,还有请问为什么路径要加引号呢,不加何妨,继续请求赐教。。。
作者: pgfj18    时间: 2010-7-29 11:28

  1. for /r a\ %%i in (1.txt) do copy /y b\b.swf "%%i"
复制代码

作者: terse    时间: 2010-7-29 11:53

原帖由 fish 于 2010-7-29 03:16 发表
前辈的代码似乎有点问题,在我这里测试时,并没有替换文件啊,我把避错显示语句去掉,提示我找不到路径(当然路径我已经设好了),未替换文件,还有请问为什么路径要加引号呢,不加何妨,继续请求赐教。。。

我这里测试了没问题
确定 你的代码路径没问题吗?
注意 目标路径后不要加 “\”
作者: fish    时间: 2010-7-29 14:03

原帖由 pgfj18 于 2010-7-29 11:28 发表
for /r a\ %%i in (a.txt) do copy /y b\b.swf "%%i"

前辈的这个代码有点问题,这样写A中所有文件夹(包括A)都会copy个b.swf(没有自动创建),不太满足题意。
作者: fish    时间: 2010-7-29 14:08

原帖由 terse 于 2010-7-29 11:53 发表

我这里测试了没问题
确定 你的代码路径没问题吗?
注意 目标路径后不要加 “\”

我在目标路径后不加“\”,又测试了一遍,果然成功,但是我还想弄明白为什么路径要用引号括起来,括与不括有什么区别?
还有,我想请前辈指教我在3楼提出的几个问题,多谢!
作者: pgfj18    时间: 2010-7-29 18:08

  1. for /f "delims=" %%i in ('dir /b /s a.txt') do copy  b\b.swf "%%i"
复制代码

作者: fish    时间: 2010-7-29 19:58

原帖由 pgfj18 于 2010-7-29 18:08 发表
for /f "delims=" %%i in ('dir /b /s a.txt') do copy  b\b.swf "%%i"  

这个代码实在有点一塔湖图的感觉,copy出来的文件名全是路径名,并且.文件夹里也有,不知前辈是怎么想的,用dir干什么啊?
作者: fish    时间: 2010-7-31 00:45

算了,问题基本解决,多谢terse前辈了,当然也要感谢关注本贴的所有前辈,多谢了,您们辛苦了。。。
作者: pgfj18    时间: 2010-7-31 07:45

原帖由 fish 于 2010-7-29 19:58 发表

这个代码实在有点一塔湖图的感觉,copy出来的文件名全是路径名,并且.文件夹里也有,不知前辈是怎么想的,用dir干什么啊?


for /f "delims=" %%i in ('dir /b /s a.txt') do copy  b\b.swf "%%i"  
dir /b /s a.txt 获得 当前目录下的所有a.txt的文件名
for /f 取得文件名,再copy

你有没有真的试过的呀,???
试一下再说好吗??
作者: fish    时间: 2010-7-31 13:04

原帖由 pgfj18 于 2010-7-31 07:45 发表


for /f "delims=" %%i in ('dir /b /s a.txt') do copy  b\b.swf "%%i"  
dir /b /s a.txt 获得 当前目录下的所有a.txt的文件名
for /f 取得文件名,再copy

你有没有真的试过的呀,???
试一下再说好吗? ...

前辈啊,我没试过敢乱说吗,您看一下截图好吧。。。




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