wchongy 发表于 2017-10-16 20:00:14

全盘搜索install.wim文件的命令 求简化

本帖最后由 wchongy 于 2017-10-16 21:29 编辑

全盘搜索 install.wim文件!!如果仅有一个文件自动拷贝到R:\OKRBackup\Factory 路径下!如果有一个以上文件,选择以后拷贝。如果没有发现该文件,自动关闭搜索退出!!

title 搜索 Install.Wim 并拷贝
setlocal enabledelayedexpansion & cd /d %~dp0

::设置Wim文件保存目录
set WimDir=R:\OKRBackup\Factory

if not exist "!WimDir!" md "!WimDir!"
del /f /q WimList_*.Log 2>nul
for %%a in (D E F G H I J K L M N P) do (
    if exist "%%~a:\" (
      pushd %%~a:\
      echo 正在搜索 %%~aInstall.Wim,此过程可能很耗时间,请耐心等待。。。 & echo,
      for /r %%i in (*install.wim) do (
            if /i "%%~nxi"=="install.wim" (
                if /i not "%%~dpi"=="!WimDir!\" (
                  set /a Num+=1
                  set "Wim=%%~i"
                  >>"%~dp0WimList_CP.Log" echo ^|!Num!^|"%%~i"
                  >>"%~dp0WimList_XZ.Log" echo !Num!、Install.Wim 位于 "!Wim:\install.wim=!",文件大小: %%~zi 字节
                )
            )
      )
      popd
    )
)
cls
if defined Num (
    if !Num! equ 1 (
      echo 正在从 "!Wim:\install.wim=!" 中拷贝 Install.Wim,请耐心等待。。。& echo,
      copy "!Wim!" "!WimDir!\" 2>nul && (
            echo 拷贝成功!
      ) || (
            echo 系统镜像拷贝失败!请手动复制Install.Wim到打开的R:\OKRBackup\Factory文件夹下
            start R:\OKRBackup\Factory
      )
    ) else (
      type WimList_XZ.Log | more
      echo, & set /p xz=请选择要拷贝的 Install.Wim 编号并回车,不选择请直接回车:
      if defined xz for /f "tokens=2 delims=|" %%f in ('findstr "^|!xz!|" WimList_CP.Log') do (
            echo, & echo 正在从 "%%~dpf" 中拷贝 Install.Wim,请耐心等待。。。& echo,
            copy "%%~f" "!WimDir!\" 2>nul && (
                echo 拷贝成功!
            ) || (
                echo 系统镜像拷贝失败!请手动复制Install.Wim到打开的R:\OKRBackup\Factory文件夹下
                start R:\OKRBackup\Factory
            )
      )
    )
) else (
    echo 未发现 Install.Wim 文件。
)
del /f /q WimList_*.Log


echo

zengqcyxx 发表于 2017-10-16 23:23:55

有何意义???

nttwqz 发表于 2017-10-16 23:54:10

setlocal enabledelayedexpansion
for /f "tokens=1,2* delims=:" %%a in ('wmic datafile where "filename='install' and extension='wim'" get name 2^>nul ^| findstr ":\\" ^| findstr /n .') do (
        set "wim-%%a=%%b:%%c"
        echo %%a:        !wim-%%a!
)
if defined wim-2 (set /p xz=请选择:) else echo !wim-1!文件复制命令
if not defined wim-1 echo 未发现 Install.Wim 文件。
echo 您已选中!wim-%xz%!

JCDN 发表于 2017-10-17 09:46:53

为了学习一下

qq328 发表于 2022-1-10 20:12:14

nttwqz 发表于 2017-10-16 23:54


n大你好!求帮我修改一个bat,在D盘A文件夹里面有个1.pdf文件,在此文件夹下运行个bat,把1.pdf文件复制到*盘(盘符没有固定)/B文件夹,然后就弹出B文件夹窗口,就像平时双击打开文件夹这样子
@echo off
cd /d "%~dp0"
set Bpath="你的B文件夹名称"
for %%i 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 (for /f "delims=" %%j in ('dir /ad/b/s "%%i:\%Bpath%"') do copy 1.pdf "%%j"&explorer "%%j" )
exit
试了一下,复制到子目录了!就是复制到了B文件夹下面的C文件夹了,弹出来是C文件夹里面
我就是想能复制到B文件夹目录下,弹出B文件夹目录窗口,帮我看一下哪里出错了,万分感谢!

nttwqz 发表于 2022-1-10 21:08:57

qq328 发表于 2022-1-10 20:12
n大你好!求帮我修改一个bat,在D盘A文件夹里面有个1.pdf文件,在此文件夹下运行个bat,把1.pdf文件复制到 ...

因为你用了两个for,第二个for去遍历B文件夹下的所有子文件夹,这样应该是复制到其所有子目录。难道B不在根目录?在的话直接改用if exist %%i:\%Bpath% 。。。就好

qq328 发表于 2022-1-11 07:59:11

nttwqz 发表于 2022-1-10 21:08
因为你用了两个for,第二个for去遍历B文件夹下的所有子文件夹,这样应该是复制到其所有子目录。难道B不在 ...

因为不知道B文件夹在哪个盘里,所以用for搜索全盘目录的文件夹,该怎么样修改?

qq328 发表于 2022-1-11 08:01:38

nttwqz 发表于 2022-1-10 21:08
因为你用了两个for,第二个for去遍历B文件夹下的所有子文件夹,这样应该是复制到其所有子目录。难道B不在 ...

直接改用if exist %%i:\%Bpath% ,一闪而过,不能用

nttwqz 发表于 2022-1-11 09:17:48

qq328 发表于 2022-1-11 08:01
直接改用if exist %%i:\%Bpath% ,一闪而过,不能用

先打开cmd,在其中执行,查看错误并修复

qq328 发表于 2022-1-11 11:35:26

nttwqz 发表于 2022-1-11 09:17
先打开cmd,在其中执行,查看错误并修复

谢谢!

dos时代菜鸟 发表于 2022-1-13 11:24:02

如果只是 判断 各个 分区盘符 下是否存在 install.wim 这个文件。
用 if exist x:\install.wim 就可以了,不用 dir 也不用 find

dos时代菜鸟 发表于 2022-1-13 11:24:51

nttwqz 发表于 2022-1-10 21:08
因为你用了两个for,第二个for去遍历B文件夹下的所有子文件夹,这样应该是复制到其所有子目录。难道B不在 ...

这个思路 是正解

2011matrixvexx 发表于 2022-1-25 00:37:26

#在这里快速回复#

2011matrixvexx 发表于 2022-1-25 00:39:11

#在这里快速回复#謝謝樓主分享,學習了

freesoft00 发表于 2022-12-26 23:16:52

nttwqz 发表于 2017-10-16 23:54

wmic全盘搜索,能只搜索1级目录或者二级目录吗
可以排除某个分区吗,比如系统盘,目录多搜索会比较耗费时间。
可以多扩展名吗,比如wim esd同时搜索

“6号” 发表于 2022-12-27 20:25:24

看懂了吗?但是还是要支持一下,感谢分享!

nttwqz 发表于 2022-12-28 23:02:50

freesoft00 发表于 2022-12-26 23:16
wmic全盘搜索,能只搜索1级目录或者二级目录吗
可以排除某个分区吗,比如系统盘,目录多搜索会比较耗 ...

如何查找根目录我知道,查找二级目录没有测试出来,毕竟好久不用wmic datafile这个命令了

wmic datafile where "drive<>'%systemdrive%' and path='\\' and (extension='wim' or extension='esd')"get name
随便写几句

echo 全盘一二级目录查找wim/esd文件

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: if /i not "%systemdrive%"=="%%a:" (
      for %%b in (%%a:\*.wim %%a:\*.esd) do echo %%b
      for /f "delims=" %%c in ('dir %%a:\ /ad /b') do (
            for /f "delims=" %%d in ('dir "%%a:\%%c\*.wim","%%a:\%%c\*.esd" /a /b 2^>nul') do echo %%a:\%%c\%%d
      )
    )
)



freesoft00 发表于 2022-12-28 23:10:01

nttwqz 发表于 2022-12-28 23:02
如何查找根目录我知道,查找二级目录没有测试出来,毕竟好久不用wmic datafile这个命令了




好的多谢!
另外再请教一个问题。
如何遍历磁盘,遍历分区,把mbr磁盘的活动分区列出来,把gpt的efi分区列出来
例如
磁盘1活动分区是2
磁盘2启动分区时1
这样的结果。
下载了你的分区信息那个脚本太复杂,有很多地方看不懂。

nttwqz 发表于 2022-12-29 11:37:23

freesoft00 发表于 2022-12-28 23:10
好的多谢!
另外再请教一个问题。
如何遍历磁盘,遍历分区,把mbr磁盘的活动分区列出来,把gpt的efi分 ...

脚本末尾有注释,这个实现特别简单,一般定制只需利用现成的变量即可。

搜索开始脚本定制,将:customcode和exit中间的代码删除,改为:
for %%a in (!dkl!) do echo 磁盘 %%a 的活动/ESP分区是 !dk_%%a_act!
pause

话说,你这是要搞个系统安装工具?自动?我觉得WinNTSetup的功能已经够强大了,没必要自己弄,也没发现这工具有流氓行为。

freesoft00 发表于 2022-12-29 11:54:15

nttwqz 发表于 2022-12-29 11:37
脚本末尾有注释,这个实现特别简单,一般定制只需利用现成的变量即可。

搜索开始脚本定制,将:customc ...

那到不是,安装系统的话确实工具更好用。

dos时代菜鸟 发表于 2022-12-30 13:02:01

本帖最后由 dos时代菜鸟 于 2022-12-30 13:05 编辑

freesoft00 发表于 2022-12-29 11:54
那到不是,安装系统的话确实工具更好用。
------------------pecmd 脚本,获取硬盘分区序列中的 efi 分区 和激活的 主引导分区。

envi parts=
envi part_info=
part list disk ,&disks
forx * %&disks%,&disk,
{
    part list part %&disk%,&parts0
    forx * %&parts0%,&part,
    {
      ifex #%&part%>0,envi parts=%parts% %&disk%#%&part%
    }
}
envi efi_parts=
envi act_parts=
forx * %parts%,&part,
{
    part -fill list part %&part%,&part_info0
    mstr &id,&act=<2><3>%&part_info0%
    ifex '%&id%'='C12A7328-F81F-11D2-BA4B-00A0C93EC93B',envi efi_parts=%efi_parts% %&part%
    ifex '%&act%'='1',envi act_parts=%act_parts% %&part%
    envi part_info=%part_info%\n%&part% %&part_info0%
}

mess %part_info%\n\nEFI_PARTS=%efi_parts%\nACT_PARTS=%act_parts%

nttwqz 发表于 2022-12-30 15:37:20

dos时代菜鸟 发表于 2022-12-30 13:02
------------------pecmd 脚本,获取硬盘分区序列中的 efi 分区 和激活的 主引导分区。

envi parts= ...

这凌乱的pecmd语法,还是python比较优美已读。还有,我感觉linux shell的语法也比较坑爹,一堆乱七八糟的语法。

dos时代菜鸟 发表于 2022-12-30 15:44:40

nttwqz 发表于 2022-12-30 15:37
这凌乱的pecmd语法,还是python比较优美已读。还有,我感觉linux shell的语法也比较坑爹,一堆乱七八糟的 ...

{:1_186:}

python 编译环境太大。

pecmd 2012 就一个文件,我从来不去记忆他的语法或者指令,需要的时候,现查就是了,感觉就像巫师在熬汤。

dos时代菜鸟 发表于 2022-12-30 17:09:35



pecmd 瞬间获取 整个磁盘分区序列中的EFI 分区 和 Act分区。


527104427 发表于 2022-12-30 17:50:56

dos时代菜鸟 发表于 2022-12-30 15:44
python 编译环境太大。

pecmd 2012 就一个文件,我从来不去记忆他的语法或者指令,需要 ...

哈哈哈,跟我一样,都是现炒现卖的!从来不记命令

nttwqz 发表于 2022-12-30 17:56:47

527104427 发表于 2022-12-30 17:50
哈哈哈,跟我一样,都是现炒现卖的!从来不记命令

你们俩真虚伪

conlin888 发表于 2022-12-30 22:26:30

PECMD语法习惯了,就好像CMD的升级版,比较容易衍接,不用费脑子。
页: [1]
查看完整版本: 全盘搜索install.wim文件的命令 求简化