中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-05 17:58
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]求一种特殊的COPY文件到目标地方的源代码 查看 882 回复 11
楼 主 [求助]求一种特殊的COPY文件到目标地方的源代码 发表于 2007-09-07 00:37 ·  中国 江苏 苏州 吴江区 电信
初级用户
积分 66
发帖 26
注册 2007-01-30 07:34
19年会员
UID 78099
性别 男
状态 离线
求一种特殊的COPY文件到目标地方的源代码

一个运行中的批处理,用鼠标拖放一个文件到运行界面上光标处,则自动拷贝被拖放文件到指定目录下面!
2 发表于 2007-09-07 07:29 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
19年会员
UID 73417
性别 男
状态 离线

@echo off
set /p path=请把文件拖放到上面来
copy %path% d:\
pause
3 发表于 2007-09-07 10:50 ·  中国 江苏 苏州 电信
初级用户
积分 66
发帖 26
注册 2007-01-30 07:34
19年会员
UID 78099
性别 男
状态 离线
谢谢了,不知我可不可以得寸进尺的再加个要求:
这个P只能一次拖放一个文件,可不可以多拖放几个,我发现用“,”是不行的,如果拖放一个文件夹的话则会拷贝这个文件夹中的所有文件到目标处,如何直接在目标处建立要拖放的文件夹。
4 发表于 2007-09-07 13:17 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
SET /P 不支持拖动多个文件^

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


MD是建立……copy是复制……
5 路过 抛半块砖 发表于 2007-09-08 12:43 ·  中国 广东 电信
初级用户
★★
积分 180
发帖 68
注册 2006-12-21 23:44
19年会员
UID 74192
性别 男
来自 China
状态 离线
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%
6 回5楼 发表于 2007-09-10 13:21 ·  中国 江苏 苏州 电信
初级用户
积分 66
发帖 26
注册 2007-01-30 07:34
19年会员
UID 78099
性别 男
状态 离线
先谢谢你了,我看了你的方法,和2楼的不同之处再于存放目标的输入。
不晓得你还有没有什么之法支持多个文件的拖放呢?
7 发表于 2007-09-10 15:33 ·  中国 广东 电信
初级用户
★★
积分 180
发帖 68
注册 2006-12-21 23:44
19年会员
UID 74192
性别 男
来自 China
状态 离线
是么
拖完一个后用逗号分隔
你再试试我那代码
8 发表于 2007-09-10 15:37 ·  中国 广东 电信
初级用户
★★
积分 180
发帖 68
注册 2006-12-21 23:44
19年会员
UID 74192
性别 男
来自 China
状态 离线
Originally posted by 0102034 at 2007-9-7 10:50 AM:
谢谢了,不知我可不可以得寸进尺的再加个要求:
这个P只能一次拖放一个文件,可不可以多拖放几个,我发现用“,”


我将楼主的意思理解为 : 拖完一个后加逗号,再拖,再逗号,再拖
9 发表于 2007-09-11 10:42 ·  中国 江苏 苏州 电信
初级用户
积分 66
发帖 26
注册 2007-01-30 07:34
19年会员
UID 78099
性别 男
状态 离线
我之前已经试过了,用“,”是不行的,4楼的slore说 /p 是不支持多个的,不晓得如何解决?
dy2003310:我对你的那个 for 后面的两句不是很了解,可以解释一下,谢谢先了!path
10 发表于 2007-09-11 11:43 ·  中国 江苏 苏州 电信
初级用户
积分 66
发帖 26
注册 2007-01-30 07:34
19年会员
UID 78099
性别 男
状态 离线
我刚才发现一个问题,凡是文件名中含有“+”或“,”等一些特殊字符的,就不能够执行拷贝的动作。
对于这个我理解为:这些符号和P的一些命令相冲突,所以P不能识别拖放后的内容到底是文件名还是命令行。
不晓得这样的理解对不对,对的话,还有那些WINDOWS界面下文件名中可允许存在但在这种情况下不能拷贝的特殊字符还有哪些?
11 汗,俺也是菜鸟.只能回答我目前能回答的 发表于 2007-09-12 15:19 ·  中国 广东 电信
初级用户
★★
积分 180
发帖 68
注册 2006-12-21 23:44
19年会员
UID 74192
性别 男
来自 China
状态 离线
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/viewthread.phptid=29556&fpage=1&highlight=tokens 

⑵调用过程并传递参数(不知是不是这样表达) 呵呵
对应 call :ok %%a %%j 这一句
12 发表于 2007-09-12 15:34 ·  中国 广东 电信
初级用户
★★
积分 180
发帖 68
注册 2006-12-21 23:44
19年会员
UID 74192
性别 男
来自 China
状态 离线
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的帖子,还有关于参数的帖子应该就搞掂了
论坛跳转: