批处理命令,BAT查找文件代码并把此文件copy到C盘一个文件夹内。爱复制别人的劳动成果的勿进

假设要全盘查找一个文件名为a.exe的程序(注:该文件只有一个),然后把C盘B文件夹(路径为C:\B)内的几个文件复制到a.exe文件所在目录下的C文件夹内(注:用xcopy命令,因为目录内还有其他文件夹),不知道能不能把a.exe所在目录的路径用SET命令赋给一个变量如%1或%luj%,因为下面的命令内有用到如:copy %luj%\abc\d.* d:\
如果能满足以上条件的话我就在加50分,如果能详细讲解每一条命令的话,小生不胜感激,小生无以为报只能加分、加分、在加分了。^_^
以下我在网上找来的代码供参考:@echo off & color 1a
set pp=qq.exe
title 查找%pp%
echo.
set /p=正在查找 <nul
for %%i in (C D E F G H I J K L M N O P Q R S T U VW X Y Z)do (
if exist %%i:\ (
cd /d %%i:\
set /p=%%i: <nul
::为什么这个^<符号是倒过来的
for /f "delims=" %%j in ('dir /b /a -d /s "%pp%" 2^>nul')do (
echo.
echo 在%%~fj找到%pp%,准备启动它,并退出本批处理...
ping -n 3 127.1>nul
::这个我知道,等待三秒
start "" "%%j"
exit /b
)))
cls
::额,cls是干啥用的,IF命令的?
echo.
echo 未找到%pp%,按任意键退出...
pause >nul

第1个回答  2011-09-16
那一句是要执行dir /b /a -d /s "qq.exe" 2>nul,但是>本身是dos中重定向符,为了表示我们需要的是>这个字符本身,而不是要重向定前面的命令,所以要加转义符^,如果不加这个,这一行就会被解释成for /f "delims=" %%j in ('dir /b /a -d /s "%pp%" 2 > nul...这一行代码就会出错。其它的一些字符比如<,>,&之些,如果你要表示它们本身,同样也要在前面加^

cls是清屏用的,没什么太大用处,这里写不写都行。
偶就直接在你上面代码基础里改了

@echo off
@echo off
set pp=a.exe
set src=c:\b
title 查找%pp%
echo.
set /p=正在查找 <nul
for %%i in (C D E F G H I J K L M N O P Q R S T U VW X Y Z)do (
::if是判断那个这个分区是否存在
if exist %%i:\ (
::cd /d为跳转当前路径
cd /d %%i:\
set /p=%%i: <nul
::为什么这个^<符号是倒过来的
for /f "delims=" %%j in ('dir /b /a -d /s "%pp%" 2^>nul')do (
echo.
::取得要查找文件所在目录至dest,还有很多用法比如取文件名取路径等等,输入for /?能看到更多
set dest=%%i:%%~pj
echo %dest%
::xcopy后的参数你用xcopy /?可以看到说明,简单说/s就是包括子目录,c为遇到错误继续,i为将目标当做目录,q为不显示复制过程,h为包括隐藏文件,r为覆盖只读文件
xcopy "%src%\*.*" "%dest%" /s /c /i /q /h /r
exit /b
)))
cls
echo.
echo 未找到%pp%,按任意键退出...
pause >nul
第2个回答  2011-09-16
@echo off
::关闭回显
set fn=a.exe
::要查找的文件
for /f "skip=1" %%i in ('wmic logicaldisk where Description="本地固定磁盘" get name') do (
::遍历所有磁盘
for /f "tokens=*" %%j in ('dir/b/s %%i:\%fn%') do set luj=%%~dpj&&goto cp
::循环处理查找a.exe所在路径,赋值变量%luj%并跳出循环(因为只有一个)
)
:cp
if %luj% neq "" echo d|xcopy /s/e/y c:\b "%luj%"
::复制c:\b到查到文件所在目录,加echo y是为了覆盖目标
pause

════════════════════
set /p=%%i: <nul
::为什么这个^<符号是倒过来的
到过来表示从后面的文件或设备输入

cls
::额,cls是干啥用的,IF命令的?
cls是清屏命令,清除此命令前得所有提示信息。
相似回答