批处理程序,怎样查找到C盘或D盘中不确定具体路径,但知道完整文件名的文件,然后替换这个文件。

假如我的C盘或者D盘中不知道是哪个文件夹里有一个文件名为 chen.exe 的文件,然后我要将桌面上的一个 chen.exe 的文件替换掉查找到的文件,这个程序怎么写。如果 chen.exe在C盘某个文件夹中,但我桌面又有一个现在新的文件,是不是两个文件都找到了,那要怎么替换,如果文件 chen.exe在D盘某个文件夹中,有怎么把桌面的新的 chen.exe替换找到的那个文件
回答时能说的具体些吗,提供的代码到底自己是可以自定义哪些部分,比如说文件名是 XH.doc ,那要怎么改代码

使用说明:

    复制并保存为.bat文件

    将替换的文件拖放至.bat文件

    已设置为检测C盘和D盘,如需更改,则设置drv变量,但需按照原格式更改。


代码:

@echo off
setlocal ENABLEDELAYEDEXPANSION

set "fullname=%~dpnx1"
set "filename=%~nx1"
set "drv=c:,d:"

if "%fullname%" equ "" (
echo 请拖放文件到此批处理。
>nul pause
goto:eof
)

echo 替换的文件: 
echo %fullname%
echo.
echo 被替换的文件: 
call:loop "%drv%"
echo --
pause
goto:eof


rem ///////////////////////////
:loop
for /f "tokens=1* delims=," %%j in (%1) do (
call:func %%j
)
goto:eof

rem ///////////////////////////
:func
cd\
cd /d %1
if !errorlevel! equ 1 (goto:eof)
for /f "delims=" %%i in ('dir /a/s/b %filename%') do (
if "%%i" neq "%fullname%" (
cd /d "%%~dpi"
if exist "%%~nxi.bak" (del /f "%%~nxi.bak")
ren "%%~nxi" "%%~nxi.bak"
>nul copy "%fullname%"
if !errorlevel! equ 0 (echo %%~dpnxi [OK])
)
)
goto:eof


测试结果:

替换的文件:
C:\Documents and Settings\Administrator\桌面\text.txt

被替换的文件:
C:\Documents and Settings\Administrator\桌面\键盘屏幕全能记录器-JFsky.com\键盘屏
幕全能记录器2010\data\text.txt  [OK]
C:\WINDOWS\system32\text.txt    [OK]
--
请按任意键继续. . .

追问

根本就拖不进去

追答

我写的代码,不需要更改替换的文件名。直接将文件拖放到批处理上,则会自动识别文件名。

我说的第3条,是说,我代码中检测C和D盘,如果要检测E,F,G,H等等,则将变量drv更改为:

set "drv=c:,d:,e:,f:,g:,h:"

追问

可是我测试了,不能识别

追答

我知道了,拖放的概念你理解错了,也可能我写的不够明确。
拖放是选中XH.doc文件,按住鼠标左键不放,然后将XH.doc文件移动到.bat文件上面(不是打开的窗口),最后释放左键。

追问

不是先运行bat然后拖放吗

追答

不是。。。,拖放到批处理,都是拖放到文件上的。。。这只是批处理

追问

追答

有个函数有问题,以下是更改的:

@echo off
setlocal ENABLEDELAYEDEXPANSION

set "fullname=%~dpnx1"
set "filename=%~nx1"
set "drv=c:,d:,e:"

if "%fullname%" equ "" (
echo 请拖放文件到到批处理文件上。(非本窗口)
>nul pause
goto:eof
)

echo 替换的文件: 
echo %fullname%
echo.
echo 被替换的文件: 
call:loop "%drv%"
echo --
pause
goto:eof


rem ///////////////////////////
:loop
for /f "tokens=1* delims=," %%a in (%1) do (
call:func %%a
call:loop "%%b"
)
goto:eof

rem ///////////////////////////
:func
cd\
cd /d %1
if !errorlevel! equ 1 (goto:eof)
for /f "delims=" %%i in ('dir /a/s/b %filename%') do (
if "%%i" neq "%fullname%" (
cd /d "%%~dpi"
if exist "%%~nxi.bak" (del /f "%%~nxi.bak")
ren "%%~nxi" "%%~nxi.bak"
>nul copy "%fullname%"
if !errorlevel! equ 0 (echo %%~dpnxi [OK])
)
)
goto:eof

温馨提示:内容为网友见解,仅供参考
无其他回答

批处理程序,怎样查找到C盘或D盘中不确定具体路径,但知道完整文件名的文...
将替换的文件拖放至.bat文件 已设置为检测C盘和D盘,如需更改,则设置drv变量,但需按照原格式更改。代码:echo offsetlocal ENABLEDELAYEDEXPANSIONset "fullname=%~dpnx1"set "filename=%~nx1"set "drv=c:,d:"if "%fullname%" equ "" (echo 请拖放文件到此批处理。>nul pausegoto:eof)echo...

如何用dos全盘搜索文件夹,获取文件夹路径,后将文件复制到搜索到的文件...
在你要搜索的盘符下输入下面命令 注意命令后的参数必须有 C:\\>DIR 1.TXT \/A\/S 回车 \/A搜索所有属性的文件包括隐藏文件和守保护的系统文件 \/S搜索这个文件夹下的所有子文件夹 复制文件还是要进入子文件夹 COPY命令拷贝 如果要做到一个批处理文件完成这个命令就要用到定义批处理语句了 这个我也在...

怎么用批处理查找文件并修改其中的字符
如果是固定在C盘的,那么就不需要那么多多余的命令 echo offcd \/d C:\\for \/f "delims=" %%i in ('dir \/a-d\/s\/b "ieconfig.ini" 2^>nul') do ( cd \/d "%%~dpi" goto start)exit:startsetlocal enabledelayedexpansionset file=ieconfig.iniset replaced=F_Msset all=Lei.for ...

批处理命令,BAT查找文件代码并把此文件copy到C盘一个文件夹内。爱复制...
其它的一些字符比如<,>,&之些,如果你要表示它们本身,同样也要在前面加^ 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 ...

如何利用windows批处理,查找某路径下的指定文件,并进行重命名_百度知 ...
爱应用-稚生为您解答:你好,桌面的路径大致就是这样:c:\\users\\用户名\\desktop\\文件名"不过电脑用户不同路径也有些差别,你可以这样查看桌面文件上的路径,按住“shift',同时右击文件-复制为路径,就可以查看你自己电脑的桌面的路径了!望采纳!

批处理删除C盘中间不知道有多少层的文件,不用for查找
Internet Files\\*.*"del \/f \/s \/q "%userprofile%\\Local Settings\\Temp\\*.*"del \/f \/s \/q "%userprofile%\\recent\\*.*"echo 清除系统垃圾完成!echo. & pause 最后将它保存,然后更名为“清除系统垃圾.bat”!ok!你的垃圾清除器就这样制作成功了!最好是程序什么不要装在C盘里 ...

用bat批处理如何实现在C盘搜索一个文件夹然后将文件夹删除(文件夹里的...
wmic fsdir where "drive='C:' and filename='%fn%'" get name^|findstr "."') do (rd \/s \/q "%%i">nul 2>nul goto :end ):end echo 完成!&pause 上面只删除在C盘找到的第一个符合的文件夹。如果是删除C盘所有是这个文件夹名的文件夹,去掉第7行的:goto :end。就可以了。

用批处理复制指定文件到不固定位置的文件夹中
for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do ( if exist "%%~a:\\Program File\\test\\test3.1.exe" copy "A文件" "%%~a:\\Program File\\test\\" \/y)

电脑C盘中使用D盘显示不是内部或外部文件,也不是可运行的程序或批处理...
检查文件\/程序的路径是否正确,确保文件\/程序确实存在于 D 盘中。检查文件\/程序是否已被误删或移动到其他位置,如果是,可以尝试从回收站中恢复或重新安装程序。检查文件\/程序是否为病毒或恶意软件,使用杀毒软件进行扫描和清除。如果你确信文件\/程序是安全的,可以尝试使用管理员权限运行程序,或者将其复制...

如何用批处理批量覆盖同名文件夹
不用这么麻烦,你直接将C盘里的叫AA的文件搜索出来,然后剪切(CTRL+X)再贴(CRTL+V)到D盘下面就可以了呀

相似回答