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

2025-03-23 16:00:56
推荐回答(2个)
回答1:

那一句是要执行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=正在查找 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: ::为什么这个^<符号是倒过来的
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:

@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: ::为什么这个^<符号是倒过来的
到过来表示从后面的文件或设备输入

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