|
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 |
|
|
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 |
|
|
yf6122010
新手上路
积分 18
发帖 18
注册 2010-12-6
状态 离线
|
|
2010-12-9 12:25 |
|
|
yf6122010
新手上路
积分 18
发帖 18
注册 2010-12-6
状态 离线
|
|
2010-12-9 12:25 |
|
|
acaigg
初级用户
积分 115
发帖 92
注册 2010-12-24
状态 离线
|
|
2010-12-25 12:20 |
|