Board logo

标题: [系统相关] 批处理怎样全盘查找一个文件并用另外一个文件替换? [打印本页]

作者: 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     标题: 批处理怎样全盘查找一个文件并用另外一个文件替换?

  1. @echo off
  2. mode con:cols=90 lines=6
  3. title  替换Windows 7 系统 的Winre.wim  开机按F8进入PE,前提是C盘要有Recovery文件夹下面有Winre.wim
  4. rem 搜索文件并安装
  5. set "FileName=Winre.wim"
  6. set "FileName1=boot.wim"
  7. echo 正在搜索,请稍候...
  8. for %%a in (C k j u z i  h g f e d ) do (
  9.     if exist %%a:\ (
  10.         for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
  11.             if /i "%%~nxb" equ "%FileName%" (
  12.                 copy /y "%~dp0%FileName1%" "%%~dpb"Winre.wim /y
  13.             )
  14.         )
  15.     )
  16. )
复制代码
"%~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

多套一层?
  1. @echo off
  2. mode con:cols=90 lines=6
  3. title  替换Windows 7 系统 的Winre.wim  开机按F8进入PE,前提是C盘要有Recovery文件夹下面有Winre.wim
  4. rem 搜索文件并安装
  5. set "FileName=Winre.wim"
  6. set "FileName1=boot.wim"
  7. echo 正在搜索,请稍候...
  8. for %%a in (C k j u z i  h g f e d ) do (
  9.     if exist %%a:\ (
  10.         for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
  11.             if /i "%%~nxb" equ "%FileName%" (
  12. for %%i in (C k j u z i  h g f e d ) do (
  13.     if exist %%i:\ (
  14.         for /f "delims=" %%j in ('dir /a-d /s /b "%%a:\*%FileName1%" 2^>nul') do (
  15.             if /i "%%~nxj" equ "%FileName1%" (
  16.                 copy /y "%%j" "%%b"
  17.             )
  18.         )
  19.     )
  20. )
  21.             )
  22.         )
  23.     )
  24. )
复制代码

作者: 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

套在一起不能吗那像这样分开呢
  1. @echo off
  2. rem 指定待搜索的文件
  3. set "FileName=Winre.wim"
  4. echo 正在搜索,请稍候...
  5. for %%a in (C) do (
  6.     if exist %%a:\ (
  7.         for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
  8.             if /i "%%~nxb" equ "%FileName%" (
  9.                 set "winre=%%b"
  10.                 goto :n
  11.             )
  12.         )
  13.     )
  14. )
  15. :n
  16. set "FileName=boot.wim"
  17. echo 正在搜索,请稍候...
  18. 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 (
  19.     if exist %%a:\ (
  20.         for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
  21.             if /i "%%~nxb" equ "%FileName%" (
  22.                 set "boot=%%b"
  23.                 goto :nn
  24.             )
  25.         )
  26.     )
  27. )
  28. :nn
  29. copy /y "%boot%" "%winre%"
  30. 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