无忧启动论坛

标题: DOS批处理文件,用于文件的批量复制 。 [打印本页]

作者: 2011gongzi    时间: 2011-4-4 11:57
标题: DOS批处理文件,用于文件的批量复制 。
拜托了
要求如下:
1.搜索固定格式的文件 如:*.txt *.exe等。
2.可以同时完成搜索 *.exe 和*.txt的类似动作。
3.对搜索到的文件进行复制进c:\1文件夹中且不能重名

作者: x9tian    时间: 2011-4-4 16:25
要求还真多呀,   试试这个看看

  1. @echo off
  2. md c:\1 2>nul
  3. cd.>file.txt
  4. for /f "delims=" %%i in (
  5.         'mountvol^|find ":"'
  6.         ) do (
  7.                 dir /a-d/b/s %%i*.txt %%i*.exe>>file.txt
  8.         )
  9. for /f "delims=" %%i  in (file.txt) do (
  10.        
  11.         if not exist "c:\1\%%~nxi" (
  12.                         echo.复制%%i &copy "%%i" c:\1\
  13.                         ) else (
  14.                                 if not exist "c:\1\%%~ni1%%~xi"  (
  15.                                         echo.复制%%i &copy "%%i" "c:\1\%%~ni1%%~xi"
  16.                                                 ) else (
  17.                                                         echo.复制%%i &copy "%%i" "c:\1\%%~ni2%%~xi "
  18.                                                 ))
  19.        
  20.         )
复制代码

作者: 2011gongzi    时间: 2011-4-4 20:31
标题: 回复 #2 x9tian 的帖子
谢谢您了 我看了代码 很好用
十分感谢您的指导
但是重命名方面 我会自己完善 谢谢了!
作者: x9tian    时间: 2011-4-4 22:52
原帖由 2011gongzi 于 2011-4-4 20:31 发表
谢谢您了 我看了代码 很好用
十分感谢您的指导
但是重命名方面 我会自己完善 谢谢了!



   引用, 你难道还有四个重复的文件??


  我不是重命名,用IF  定义了两次, 可以处理三个重复的文件吗?

  如果还那样, 我建议你用变量来定义,  用 IF  not  defined    来处理, 重复的,
COPY  .bAK 来处理文件, 如果多次重复就再多加个.BAK 原后再, 处理目录下的的文件
按 .BAK   多少来处理文件名



这样N个都不怕了
作者: haiou327    时间: 2011-4-5 00:17
试试这样不用再考虑有重名文件

@echo off
set Fn=%date%%Time%
set Fn=__%Fn::=:%
if not exist c:\1 md c:\1
cd.>file.txt
for /f "delims=" %%i in (
  'mountvol^
|find ":\"'
  )
do (
     dir
/a-d/b/s %%i*.txt %%i*.exe>>file.txt
        )
for /f "delims=" %%i  in (file.txt) do (
   if
not exist "c:\1\%%~nxi" (
     echo
.复制%%i &Copy "%%i" c:\1\
     ) else (
      
echo.复制%%i &Copy "%%i" "c:\1\%%~ni%Fn%%%~xi"
        )
     )         

作者: 2011gongzi    时间: 2011-4-5 09:39
标题: 回复 #4 x9tian 的帖子
多谢您的指点 O(∩_∩)O哈!
我快完成了~~
谢谢了
作者: 2011gongzi    时间: 2011-4-5 09:41
标题: 回复 #5 haiou327 的帖子
弱弱的说一句 您给的程序 依然不能消除 重名的问题
但是 我已经完成了 对您给予的帮助 十分感谢~~!!!
谢谢了!!!
作者: 2011gongzi    时间: 2011-4-5 11:46
标题: 回复 #2 x9tian 的帖子
大哥 这句我不会用
for /f "delims=" %%i in (
        'mountvol^|find ":\"'
        )
要是想把它改成 指定盘符的怎么改?
我是说 只改这一句~~
作者: x9tian    时间: 2011-4-5 12:26
标题: 回复 #5 haiou327 的帖子
哈哈, 也是, 用时间来处理还是蛮好的,

   条条大道通罗马呀  ,,,
作者: x9tian    时间: 2011-4-5 12:33
原帖由 2011gongzi 于 2011-4-5 11:46 发表
大哥 这句我不会用
for /f "delims=" %%i in (
        'mountvol^|find ":\"'
        )
要是想把它改成 指定盘符的怎么改?
我是说 只改这一句~~


     for /f  结构,  是处理, 文本, 命令, 专用的.

   如果改成指定盘符的话,


  直截for  %%i in (  
                  c:  d:  e:

                 )


     其实我明白你胸中的想法,

   你意思是说:  "  我直截用命令查找我想找的文件夹, 或分区的目录.


     [code]

    for  /f "delims=" %%i  in (
                  'dir /a-d /b/s  c:\*.txt c:\*.exe  d:\我这个文件夹\*.txt'
                    ) do  (

                            copy /y  "%%i"  c:\1\
                   )


               须要注意的是, dir 命令 支持同时处理,多个文件夹,  但不要超个十个, 不然是无法运行的.   
作者: 2011gongzi    时间: 2011-4-5 13:10
标题: 回复 #10 x9tian 的帖子
您真是 太细心了 我都想感谢的亲你了~~~
O(∩_∩)O哈!
作者: x9tian    时间: 2011-4-5 13:34
羞(# ̄▽ ̄#)

  过奖.




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3