中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理选择性复制文件一直没成功,求解决
作者:
标题: 批处理选择性复制文件一直没成功,求解决 上一主题 | 下一主题
evilangell
初级用户





积分 32
发帖 32
注册 2008-4-18
状态 离线
『楼 主』:  批处理选择性复制文件一直没成功,求解决

选择性复制文件.BAT

功能:
1:如果此批处理还未运行,我拖放一个文件(或几个文件)到这个P处理图标上,然后可以根据选择将这个文件(或这几个文件)复制到指定位置,如按1复制到C盘根目录,按2复制到c:\windows目录,按3退出。

2:如果我已经将这个批处理双击,那么,我拖放一个文件(或几个文件)到这个P处理上窗口上,然后可以根据选择将这个文件(或这几个文件)复制到指定位置,如按1复制到C盘根目录,按2复制到c:\windows目录,按3退出。

小弟试了好久一直没成功,请大牛帮忙一下,谢谢

2010-10-20 10:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
evilangell
初级用户





积分 32
发帖 32
注册 2008-4-18
状态 离线
『第 2 楼』:  

:again
echo.
if "%~f1" neq "" (set FullPathName=%~f1) else (goto ADD)
:ADD
set FullPathName=%~f1
ECHO %FullPathName%
@set choice
@set /p choice= 请选择【1→windows目录下】,【2→system32目录下】,【3→C盘】
echo.
set FullPathName=%~f1
::IF NOT "%Choice%"=="" SET Choice=%Choice:~0,1%
PAUSE
echo.
if /i "%choice%"=="1" goto windows
if /i "%choice%"=="2" goto system32
if /i "%choice%"=="3" goto CC
echo.
ECHO 选项不对,按任意键退出
pause
exit
:windows
ECHO "%FullPathName%" 将被复制到windows目录下
COPY "%FullPathName%" %SYSTEMROOT%\
pause
goto again

:system32
ECHO "%FullPathName%" 将被复制到system32目录下
COPY "%FullPathName%" %SYSTEMROOT%\system32\
pause
goto again

:CC
ECHO "%FullPathName%" 将被复制到C盘
COPY "%FullPathName%" C:\
pause
goto again

这是草稿,乱的很,大牛别见笑

2010-10-20 10:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
evilangell
初级用户





积分 32
发帖 32
注册 2008-4-18
状态 离线
『第 3 楼』:  

如果不能拖放多个文件,拖放一个文件也行

2010-10-20 13:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
evilangell
初级用户





积分 32
发帖 32
注册 2008-4-18
状态 离线
『第 4 楼』:  

@title复制文件到指定路径下 &@color f3&CLS&echo.
:again
@echo.
@if "%~f1" neq "" (set FullPathName="%~f1" &goto Zhijie) else (goto InWindowns)
:InWindowns
@set /p choice=请拖放一个需要被复制的文件到本出口内(拖进来后请按回车):
@set FullPathName=%choice%
@echo.
:Zhijie
@set /p choice=[1→windows目录下], [2→system32目录下], [3→C盘根目录], [Q→EXIT]  
@IF NOT "%Choice%"=="" SET Choice=%Choice:~0,1%
@echo.
@if /i "%choice%"=="1" goto windows
@if /i "%choice%"=="2" goto system32
@if /i "%choice%"=="3" goto C_Disk
@if /i "%choice%"=="q" EXIT
@if /i "%choice%"=="Q" EXIT
::过滤因直接回车而误复制文件
@echo                                 【!您还未拖入任何文件!】
@goto again
:windows
@ECHO %FullPathName%已被复制到windows目录下
@COPY %FullPathName% %SYSTEMROOT%\
@pause
@goto again

:system32
@ECHO %FullPathName%已被复制到system32目录下
@COPY %FullPathName% %SYSTEMROOT%\system32\
@pause
@goto again

:C_Disk
@ECHO %FullPathName%已被复制到C盘
::if exist %FullPathName% (echo 文件已存在 &goto again) else (@COPY %FullPathName% C:\)
@COPY %FullPathName% C:\
@pause
@goto again


复制单个文件已经没问题。
有几个小缺陷:
1,没判断文件已经存在的情况
2,见图,第一次拖入文件后成功复制后,如果空按回车键,会出现如图情况,感觉选择的变量没被清空,但我加入@set /p choice=“”,没法清空。但不影响使用,望高手能来完善!

2010-10-20 16:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
evilangell
初级用户





积分 32
发帖 32
注册 2008-4-18
状态 离线
『第 5 楼』:  

图传不上,还是我复制过来吧

以下是cmd.EXE里复制过来的:


请拖放一个需要被复制的文件到本出口内(拖进来后请按回车):"C:\Documents and Settin
gs\Administrator\桌面\欧姆龙.T"

[1→windows目录下], [2→system32目录下], [3→C盘根目录], [Q→EXIT]  3

"C:\Documents and Settings\Administrator\桌面\欧姆龙.T"已被复制到C盘
已复制         1 个文件。
请按任意键继续. . .

请拖放一个需要被复制的文件到本出口内(拖进来后请按回车):

[1→windows目录下], [2→system32目录下], [3→C盘根目录], [Q→EXIT]

3已被复制到C盘
系统找不到指定的文件。
请按任意键继续. . .

请拖放一个需要被复制的文件到本出口内(拖进来后请按回车):

[1→windows目录下], [2→system32目录下], [3→C盘根目录], [Q→EXIT]

3已被复制到C盘
系统找不到指定的文件。
请按任意键继续. . .

2010-10-20 16:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『第 6 楼』:  


@echo off
title 复制文件到指定路径下
color 17&cls&echo.
if [%1]==[] goto DoOneByOne

:DoForEach
if [%1]==[] goto End
echo 文件 %1
call :GetChoice
if /i [%choice%]==[Q] goto End
call :CopyOneFile %1
shift /1
goto DoForEach

:DoOneByOne
echo.&echo 请拖放一个需要被复制的文件到本窗口内(拖进来后请按回车):
set "fn="
set /p fn=
if [%fn%]==[] goto DoOneByOne
call :GetChoice
if /i [%choice%]==[Q] goto End
call :CopyOneFile %fn%
goto DoOneByOne

:End
echo === 程序结束 ===
pause>nul
goto EOF

::=========== END ===========

:GetChoice
echo.&echo [1]→WINDOWS目录    [2]→SYSTEM32目录    [3]→C盘根目录    [Q]→退出
set "choice="
set /p choice=
if /i [%choice%]==[] goto GetChoice
set "loc="
if /i [%choice%]==[1] set "loc=%SYSTEMROOT%\"
if /i [%choice%]==[2] set "loc=%SYSTEMROOT%\system32\"
if /i [%choice%]==[3] set "loc=C:\"
if [%loc%]==[] set "choice=Q"
goto EOF 2>nul

:CopyOneFile
cls&echo.
if exist "%loc%\%~nx1" (
    echo *** "%loc%%~nx1" 已存在 ***
) else (
    copy %1 "%loc%" 1>nul&&echo 成功复制 "%~nx1" 到 "%loc%"
)
echo.
goto EOF 2>nul
[ Last edited by qinchun36 on 2010-10-22 at 16:09 ]

2010-10-21 18:13
查看资料  发送邮件  发短消息 网志  OICQ (182484135)  编辑帖子  回复  引用回复
evilangell
初级用户





积分 32
发帖 32
注册 2008-4-18
状态 离线
『第 7 楼』:  

如果是拖一堆东西到批处理图标上的话,只问一次复制到哪儿。

答:根据1,2,3选择对应的目录。

2010-10-21 22:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
evilangell
初级用户





积分 32
发帖 32
注册 2008-4-18
状态 离线
『第 8 楼』:  

有个疑问:
shift /1
什么作用?

最好文件拖到这个批处理图标上后能显示拖进来文件的文件名

2010-10-22 13:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『第 9 楼』:  

你不知道拖了多少个到批处理图标上,又要每个都复制,就只好用 shift 去取每个参数了。

关于 shift 的作用你去看看说明或者查查相关帖子,大概就是把后面的参数移位的意思,几句话不好说清楚的。

2010-10-22 16:13
查看资料  发送邮件  发短消息 网志  OICQ (182484135)  编辑帖子  回复  引用回复
yf6122010
新手上路





积分 18
发帖 18
注册 2010-12-6
状态 离线
『第 10 楼』:  

学习...

2010-12-9 12:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yf6122010
新手上路





积分 18
发帖 18
注册 2010-12-6
状态 离线
『第 11 楼』:  

顶..下

2010-12-9 12:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
acaigg
初级用户





积分 115
发帖 92
注册 2010-12-24
状态 离线
『第 12 楼』:  

学习一下。

2010-12-25 12:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: