Board logo

标题: [求助]求一种特殊的COPY文件到目标地方的源代码 [打印本页]

作者: 0102034     时间: 2007-9-7 00:37    标题: [求助]求一种特殊的COPY文件到目标地方的源代码

求一种特殊的COPY文件到目标地方的源代码

一个运行中的批处理,用鼠标拖放一个文件到运行界面上光标处,则自动拷贝被拖放文件到指定目录下面!
作者: jmz573515     时间: 2007-9-7 07:29

@echo off
set /p path=请把文件拖放到上面来
copy %path% d:\
pause

作者: 0102034     时间: 2007-9-7 10:50
谢谢了,不知我可不可以得寸进尺的再加个要求:
  这个P只能一次拖放一个文件,可不可以多拖放几个,我发现用“,”是不行的,如果拖放一个文件夹的话则会拷贝这个文件夹中的所有文件到目标处,如何直接在目标处建立要拖放的文件夹。
作者: slore     时间: 2007-9-7 13:17
SET /P 不支持拖动多个文件^

你可以用%1 %2……BAT的参数,不过……这样是把文件拖到BAT文件上,而不是窗口中


MD是建立……copy是复制……
作者: dy2003310     时间: 2007-9-8 12:43    标题: 路过 抛半块砖

code [copy to clipboard]

@echo off
set /p des=请输入要复制到的路径(例如e:\或其它)
set /p path=请拖文件来
echo %path% >1.txt

for /l %%a in (1,1,20) do (
    for %%j in (j) do call :ok %%a %%j
    )

del /f 1.txt
goto:eof

:ok
for /f "delims=, tokens=%1" %%i in (1.txt) do copy %%i %des%
作者: 0102034     时间: 2007-9-10 13:21    标题: 回5楼

先谢谢你了,我看了你的方法,和2楼的不同之处再于存放目标的输入。
不晓得你还有没有什么之法支持多个文件的拖放呢?
作者: dy2003310     时间: 2007-9-10 15:33
是么  
拖完一个后用逗号分隔
你再试试我那代码
作者: dy2003310     时间: 2007-9-10 15:37


  Quote:
Originally posted by 0102034 at 2007-9-7 10:50 AM:
谢谢了,不知我可不可以得寸进尺的再加个要求:
  这个P只能一次拖放一个文件,可不可以多拖放几个,我发现用“,”

我将楼主的意思理解为 :  拖完一个后加逗号,再拖,再逗号,再拖
作者: 0102034     时间: 2007-9-11 10:42
我之前已经试过了,用“,”是不行的,4楼的slore说 /p 是不支持多个的,不晓得如何解决?
dy2003310:我对你的那个 for 后面的两句不是很了解,可以解释一下,谢谢先了!path
作者: 0102034     时间: 2007-9-11 11:43
我刚才发现一个问题,凡是文件名中含有“+”或“,”等一些特殊字符的,就不能够执行拷贝的动作。
对于这个我理解为:这些符号和P的一些命令相冲突,所以P不能识别拖放后的内容到底是文件名还是命令行。
不晓得这样的理解对不对,对的话,还有那些WINDOWS界面下文件名中可允许存在但在这种情况下不能拷贝的特殊字符还有哪些?
作者: dy2003310     时间: 2007-9-12 15:19    标题: 汗,俺也是菜鸟.只能回答我目前能回答的

1.  我的思路:

(1)因为即使已选定几个文件, 但拖到那窗口时, 只显示出其中一个文件的 路径

(2)所以我拖完一个文件后,用逗号隔开(这里对应
 for /f "delims=, tokens=%1" %%i in (1.txt) do copy %%i %des%
 这一代码中的  
 delims=,   )
   这也是楼主所说的  
我刚才发现一个问题,凡是文件名中含有“+”或“,”等一些特殊字符的,就不能够执行拷贝的动作。
   的一个原因
 因为","已经用来作分隔号
   至于"+"为什么不能,俺现在太菜,呵呵

(3)如此这般,呵呵,那个窗口就出现了如下情形:
 "d:\a.txt","d:\b.txt","d:\c.txt","d:\d.txt"……(这是在我的机上的实验)
 即是出现了所有要复制的文件的路径,且这此路径是被逗号分隔开的

(4)接着下来就是将   "d:\a.txt","d:\b.txt","d:\c.txt","d:\d.txt"……  
   这些路径保存到1.txt这个文本文件中( 对应  echo %path% >1.txt  这一句)
   于是1.txt 中的内容为
   "d:\a.txt","d:\b.txt","d:\c.txt","d:\d.txt"……  

(5)接下来的for 就是将1.txt中的内容变成如下形式
  "d:\a.txt"
    "d:\b.txt"
    "d:\c.txt"
    "d:\d.txt"
    ……
   因为  ( copy %%i %des%  )这句中的%%i 就是代表"d:\a.txt"等

汗,不会表达~~

  代码中的三句for 涉及到的知识主要是:
 ⑴如何将变量赋给for中的tokens
  对应帖子
http://www.cndos.net/forum/viewt ... mp;highlight=tokens 
   
  ⑵调用过程并传递参数(不知是不是这样表达) 呵呵
     对应   call :ok %%a %%j   这一句
作者: dy2003310     时间: 2007-9-12 15:34
for /l %%a in (1,1,20) do (                  ::%%a 代表文件路径
    for %%j in (j) do call :ok %%a %%j      ::%%j 代表参数tokens
    )

del /f 1.txt
goto:eof

:ok
for /f "delims=, tokens=%1" %%i in (1.txt) do copy %%i %des%
  
   :: %1表示参数%%a
   :: call :ok %%a %%j  这句中,
%%a 表示参数%1   
%%j表示参数%2

汗,说不下去了,俺的表达能力实在不行
楼主多看看关于for的帖子,还有关于参数的帖子应该就搞掂了