无忧启动论坛

标题: 全盘搜索install.wim文件的命令 求简化 [打印本页]

作者: wchongy    时间: 2017-10-16 20:00
标题: 全盘搜索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 正在搜索 %%~a  Install.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
有何意义???
作者: nttwqz    时间: 2017-10-16 23:54
  1. setlocal enabledelayedexpansion
  2. for /f "tokens=1,2* delims=:" %%a in ('wmic datafile where "filename='install' and extension='wim'" get name 2^>nul ^| findstr ":\" ^| findstr /n .') do (
  3.         set "wim-%%a=%%b:%%c"
  4.         echo %%a:        !wim-%%a!
  5. )
  6. if defined wim-2 (set /p xz=请选择:) else echo !wim-1!文件复制命令
  7. if not defined wim-1 echo 未发现 Install.Wim 文件。
  8. echo 您已选中!wim-%xz%!
复制代码

作者: JCDN    时间: 2017-10-17 09:46
为了学习一下
作者: qq328    时间: 2022-1-10 20:12
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
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
nttwqz 发表于 2022-1-10 21:08
因为你用了两个for,第二个for去遍历B文件夹下的所有子文件夹,这样应该是复制到其所有子目录。难道B不在 ...

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

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

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

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

谢谢!
作者: dos时代菜鸟    时间: 2022-1-13 11:24
如果只是 判断 各个 分区盘符 下是否存在 install.wim 这个文件。
用 if exist x:\install.wim 就可以了,不用 dir 也不用 find

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

这个思路 是正解
作者: 2011matrixvexx    时间: 2022-1-25 00:37
#在这里快速回复#
作者: 2011matrixvexx    时间: 2022-1-25 00:39
#在这里快速回复#謝謝樓主分享,學習了
作者: freesoft00    时间: 2022-12-26 23:16
nttwqz 发表于 2017-10-16 23:54

wmic  全盘搜索,能只搜索1级目录或者二级目录吗
可以排除某个分区吗,比如系统盘,目录多搜索会比较耗费时间。
可以多扩展名吗,比如wim esd同时搜索
作者: “6号”    时间: 2022-12-27 20:25
看懂了吗?但是还是要支持一下,感谢分享!
作者: nttwqz    时间: 2022-12-28 23:02
freesoft00 发表于 2022-12-26 23:16
wmic  全盘搜索,能只搜索1级目录或者二级目录吗
可以排除某个分区吗,比如系统盘,目录多搜索会比较耗 ...

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

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

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

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

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

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


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

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

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

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

作者: dos时代菜鸟    时间: 2022-12-30 13:02
本帖最后由 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
dos时代菜鸟 发表于 2022-12-30 13:02
------------------pecmd 脚本  ,获取硬盘分区序列中的 efi 分区 和激活的 主引导分区。

envi parts= ...

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



python 编译环境太大。

pecmd 2012 就一个文件,我从来不去记忆他的语法或者指令,需要的时候,现查就是了,感觉就像巫师在熬汤。
作者: dos时代菜鸟    时间: 2022-12-30 17:09
efi&amp;act_partst.7z (1.08 MB, 下载次数: 3)

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



作者: 527104427    时间: 2022-12-30 17:50
dos时代菜鸟 发表于 2022-12-30 15:44
python 编译环境太大。

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

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

你们俩真虚伪
作者: conlin888    时间: 2022-12-30 22:26
PECMD语法习惯了,就好像CMD的升级版,比较容易衍接,不用费脑子。




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3