标题: [系统相关] 批处理怎样全盘查找一个文件并用另外一个文件替换? [打印本页]
作者: wlishihua 时间: 2021-8-7 18:42 标题: 【已解决】批处理怎样全盘查找一个文件并用另外一个文件替换?
本帖最后由 wlishihua 于 2021-8-10 04:41 编辑
全盘查找一个文件,找到后用另外一个文件替换
比如说,在电脑里有一个文件叫XXX.WIM,但不知道在哪个分区里。 找到 后我用另一个XXX.WIM 自动替换
而且这个文件带有只读、隐藏属性,就是说有 +s +a +h +r属性
贴上代码
@echo off
color 1f
mode con:cols=60 lines=10
title 替换Winre.wim 开机按F8进入PE
echo.
set "FileName=Winre.wim"
set "FileName1=boot.wim"
echo 正在执行命令,请稍候......
for %%a in (C ) do (
if exist %%a:\ (
for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
if /i "%%~nxb" equ "%FileName%" (
for %%a in (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:\ (
for /f "delims=" %%j in ('dir /a-d /s /b "%%a:\*%FileName1%" 2^>nul') do (
if /i "%%~nxj" equ "%FileName1%" (
attrib -s -a -h -r "%%b"
copy /y "%%j" "%%b" /z
attrib +s +a +h +r "%%b"
)
)
)
)
)
)
)
)
作者: Batcher 时间: 2021-8-7 19:05
回复 1# wlishihua
试试哪个代码能找到:批处理全盘搜索指定文件获取其完整路径
http://bbs.bathome.net/thread-3465-1-1.html
作者: wlishihua 时间: 2021-8-7 19:35
这个能搜索到文件,但是搜索到 了要用批处理目录的同名文件替换搜索到 的文件,怎么继续?
@echo off
rem 指定待搜索的文件
set "FileName=Winre.wim"
echo 正在搜索,请稍候...
for %%a in (C ) do (
if exist %%a:\ (
for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
if /i "%%~nxb" equ "%FileName%" (
echo,%%b
)
)
)
)
作者: Batcher 时间: 2021-8-7 20:11
回复 3# wlishihua
echo,%%b
改成:
copy /y "%~dp0%FileName%" "%%~dpb"
作者: wlishihua 时间: 2021-8-7 21:40
SetLocal EnableDelayedExpansion
for /f "delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
set var=%%i
set drive=!var:~-2!
fsutil fsinfo drivetype !drive!|find "固定">nul && for /f "delims=" %%a in ('dir/s/a-d/b !drive!\Winre.wim 2^>nul') do copy /y "Winre.wim" "%%~dpa")
已解决,但是不知道“固定”是啥意思
作者: newswan 时间: 2021-8-7 21:49
本帖最后由 newswan 于 2021-8-7 21:51 编辑
固定驱动器,也就是硬盘
还有移动磁盘 网络磁盘 光盘等
作者: wlishihua 时间: 2021-8-9 07:24
回复 4# Batcher
全部代码如下
@echo off
mode con:cols=90 lines=6
title 替换Windows 7 系统 的Winre.wim 开机按F8进入PE,前提是C盘要有Recovery文件夹下面有Winre.wim
rem 搜索文件并安装
set "FileName=Winre.wim"
set "FileName1=boot.wim"
echo 正在搜索,请稍候...
for %%a in (C k j u z i h g f e d ) do (
if exist %%a:\ (
for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
if /i "%%~nxb" equ "%FileName%" (
copy /y "%~dp0%FileName1%" "%%~dpb"Winre.wim /y
)
)
)
)
"%~dp0%FileName1%"这段命令是在同批处理同一目录下的boot.wim文件,而我想达到的目的是全盘下的boot.wim,找到一个就复制这一个
作者: wlishihua 时间: 2021-8-9 07:25 标题: 批处理怎样全盘查找一个文件并用另外一个文件替换?
- @echo off
- mode con:cols=90 lines=6
- title 替换Windows 7 系统 的Winre.wim 开机按F8进入PE,前提是C盘要有Recovery文件夹下面有Winre.wim
- rem 搜索文件并安装
- set "FileName=Winre.wim"
- set "FileName1=boot.wim"
- echo 正在搜索,请稍候...
- for %%a in (C k j u z i h g f e d ) do (
- if exist %%a:\ (
- for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
- if /i "%%~nxb" equ "%FileName%" (
- copy /y "%~dp0%FileName1%" "%%~dpb"Winre.wim /y
- )
- )
- )
- )
复制代码
"%~dp0%FileName1%"这段命令是在同批处理同一目录下的boot.wim文件,而我想达到的目的是全盘下的boot.wim,找到一个就复制这一个
作者: sa5822054 时间: 2021-8-9 09:11
踩!好吧,
作者: wlishihua 时间: 2021-8-9 10:33
回复 2# sa5822054
不明白,睬是什么?
作者: gcbgczhang 时间: 2021-8-9 13:08
本帖最后由 gcbgczhang 于 2021-8-9 13:09 编辑
你是要找到了改名?还是要用一个文件去替换内容?
作者: wlishihua 时间: 2021-8-9 16:56
回复 4# gcbgczhang
找到 Winre.wim 再全盘查找boot.wim改名为Winre.wim 替换(Winre.wim)它
作者: idwma 时间: 2021-8-9 17:08
多套一层?- @echo off
- mode con:cols=90 lines=6
- title 替换Windows 7 系统 的Winre.wim 开机按F8进入PE,前提是C盘要有Recovery文件夹下面有Winre.wim
- rem 搜索文件并安装
- set "FileName=Winre.wim"
- set "FileName1=boot.wim"
- echo 正在搜索,请稍候...
- for %%a in (C k j u z i h g f e d ) do (
- if exist %%a:\ (
- for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
- if /i "%%~nxb" equ "%FileName%" (
-
- for %%i in (C k j u z i h g f e d ) do (
- if exist %%i:\ (
- for /f "delims=" %%j in ('dir /a-d /s /b "%%a:\*%FileName1%" 2^>nul') do (
- if /i "%%~nxj" equ "%FileName1%" (
- copy /y "%%j" "%%b"
- )
- )
- )
- )
- )
- )
- )
- )
复制代码
作者: wlishihua 时间: 2021-8-9 17:28
本帖最后由 wlishihua 于 2021-8-9 17:56 编辑
回复 6# idwma
还是不行,第一个都没搜索到
作者: Batcher 时间: 2021-8-9 17:35
回复 7# wlishihua
这个代码实现的功能和3楼描述的需求有哪些差异吗?
作者: wlishihua 时间: 2021-8-9 18:37
回复 15# Batcher
就是说,我要在C盘找到Winre.wim这个文件,就是不知道在什么文件夹下,但是这个文件夹有隐藏,只读属性,找到这个文件后,在全盘搜索一个文件(boot.wim)复制过去并改名,改为Winre.wim
先确定有这个文件Winre.wim 再用boot.wim改名去替换掉
作者: Batcher 时间: 2021-8-9 18:42
1. 在C盘找到Winre.wim这个文件
2. 在全盘搜索一个文件(boot.wim)
这两个功能你现在知道怎么写代码了?请发出来,我帮你补充最后一个功能:再用boot.wim改名去替换掉
作者: wlishihua 时间: 2021-8-9 18:57
@echo off
mode con:cols=90 lines=6
title 替换Windows 7 系统 的Winre.wim 开机按F8进入PE
rem 搜索文件并安装
set "FileName=Winre.wim"
set "FileName1=boot.wim"
echo 正在搜索,请稍候...
for %%a in (C k j u z i h g f e d ) do (
if exist %%a:\ (
for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
if /i "%%~nxb" equ "%FileName%" (
for %%i in (C k j u z i h g f e d ) do (
if exist %%i:\ (
for /f "delims=" %%j in ('dir /a-d /s /b "%%a:\*%FileName1%" 2^>nul') do (
if /i "%%~nxj" equ "%FileName1%" (
copy /y "%%j" "%%b"
)
)
)
)
)
)
)
)
坛友写的,但是运行不了,搜索不到 文件
作者: Batcher 时间: 2021-8-9 19:02
回复 18# wlishihua
1. 在C盘找到Winre.wim这个文件
这个功能你知道怎么实现了吗?要不你再参考这几个代码试试:
http://bbs.bathome.net/thread-3465-1-1.html
作者: wlishihua 时间: 2021-8-9 19:04
本帖最后由 wlishihua 于 2021-8-9 19:14 编辑
回复 19# Batcher
这个没问题
@echo off
rem 指定待搜索的文件
set "FileName=Winre.wim"
echo 正在搜索,请稍候...
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:\ (
for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
if /i "%%~nxb" equ "%FileName%" (
echo,%%b
)
)
)
)
pause
这个找到文件 后,再全盘搜索boot.wim 去改名以同名去替换它
这是WINDOWS10系统的代码,因为win10的文件夹是固定的(就是说每台机器都一样,而WIN7就不一样,没固定,所以有点难办
@echo off
color 1f
mode con:cols=60 lines=10
title 替换Winre.wim 开机按F8进入PE
echo.
echo 正在执行命令,请稍候......
echo.
set "ff=boot.wim."
for %%i in ( k j u z i h g f e d )do (
if exist %%i:\ (
cd/d %%i:\
set/p=%%i: <nul
for /f "delims=" %%j in ('dir/b/a-d/s "%ff%" 2^>nul')do (
ping -n 3 127.1>nul
if not exist C:\Recovery\WindowsRE\Winre.wim copy /y "%%j" C:\Recovery\WindowsRE\Winre.wim /y/z
)))
作者: Batcher 时间: 2021-8-9 19:15
在C盘找到Winre.wim这个文件,为何要写 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) 呢?有什么特殊的原因吗
作者: wlishihua 时间: 2021-8-9 19:18
本帖最后由 wlishihua 于 2021-8-9 19:24 编辑
回复 21# Batcher
Win7的F8按键进入修复系统是没GUI界面的,那么,我想用PE文件 去替换它,开机按F8以PE的模式进入,备份恢复 系统
boot.wim与批处理文件 在同一目录已实现,但是在全盘达到 这个boot.wim文件去替换Winre.wim 不知道怎么写
知道这个文件 在C盘 只搜索C也行
@echo off
rem 指定待搜索的文件
set "FileName=Winre.wim"
echo 正在搜索,请稍候...
for %%a in (C ) do (
if exist %%a:\ (
for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
if /i "%%~nxb" equ "%FileName%" (
echo,%%b
)
)
)
)
pause
作者: idwma 时间: 2021-8-9 19:44
回复 22# wlishihua
套在一起不能吗那像这样分开呢- @echo off
- rem 指定待搜索的文件
- set "FileName=Winre.wim"
- echo 正在搜索,请稍候...
- for %%a in (C) do (
- if exist %%a:\ (
- for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
- if /i "%%~nxb" equ "%FileName%" (
- set "winre=%%b"
- goto :n
- )
- )
- )
- )
- :n
- set "FileName=boot.wim"
- echo 正在搜索,请稍候...
- 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:\ (
- for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
- if /i "%%~nxb" equ "%FileName%" (
- set "boot=%%b"
- goto :nn
- )
- )
- )
- )
- :nn
- copy /y "%boot%" "%winre%"
- pause
复制代码
作者: wlishihua 时间: 2021-8-9 19:53
回复 18# wlishihua
不知道哪儿错了,现在按这个运行成功
@echo off
set "FileName=Winre.wim"
set "FileName1=boot.wim"
echo 正在执行命令,请稍候...
for %%a in (C ) do (
if exist %%a:\ (
for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
if /i "%%~nxb" equ "%FileName%" (
for %%a in (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:\ (
for /f "delims=" %%j in ('dir /a-d /s /b "%%a:\*%FileName1%" 2^>nul') do (
if /i "%%~nxj" equ "%FileName1%" (
copy /y "%%j" "%%b" /z
)
)
)
)
)
)
)
)
作者: wlishihua 时间: 2021-8-9 20:04
@echo off
color 1f
mode con:cols=60 lines=10
title 替换Winre.wim 开机按F8进入PE
echo.
set "FileName=Winre.wim"
set "FileName1=boot.wim"
echo 正在执行命令,请稍候......
for %%a in (C ) do (
if exist %%a:\ (
for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
if /i "%%~nxb" equ "%FileName%" (
for %%a in (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:\ (
for /f "delims=" %%j in ('dir /a-d /s /b "%%a:\*%FileName1%" 2^>nul') do (
if /i "%%~nxj" equ "%FileName1%" (
attrib -s -a -h -r "%%b"
copy /y "%%j" "%%b" /z
attrib +s +a +h +r "%%b"
)
)
)
)
)
)
)
)
找到Winre.wim后,因为是只读属性所以要先去掉属性才能复制,复制完后,再给它赋予只读属性,要不然它拒绝访问。到此这个问题已解决,谢谢大家的帮忙,谢谢!
作者: wlishihua 时间: 2021-8-9 20:34
回复 23# idwma
测试了一下,不错,执行速度好像要快一点,
@echo off
rem 指定待搜索的文件
set "FileName=Winre.wim"
echo 正在搜索,请稍候...
for %%a in (C) do (
if exist %%a:\ (
for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
if /i "%%~nxb" equ "%FileName%" (
set "winre=%%b"
attrib -s -a -h -r %%b
goto :n
)
)
)
)
:n
set "FileName=boot.wim"
echo 正在搜索,请稍候...
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:\ (
for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
if /i "%%~nxb" equ "%FileName%" (
set "boot=%%b"
goto :nn
)
)
)
)
:nn
copy /y "%boot%" "%winre%"
attrib +s +a +h +r "%winre%"
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |