无忧启动论坛

标题: 求一段代码,关于fbinst.exe的 [打印本页]

作者: 红毛樱木    时间: 2014-5-13 22:59
标题: 求一段代码,关于fbinst.exe的
本帖最后由 红毛樱木 于 2014-5-14 02:57 编辑

用的百草兄的fbinst
现在想实现个功能,望指教
PE构架是这样的:
外置工具包再FBA内的\USM_TOOL\PETOOL.WIM内
加载shell之前需要创建Y盘,我现在创建Y盘是直接   RAMD ImDisk,L52,FAT,Y:,RamdY_TOOLS
这样有一个问题,每次如果PETOOL.WIM我修改,增大之后都需要调整这段代码
不知道如何通过判断PETOOL.WIM的大小来自动创建Y盘大小。


希望能实现这样:
实际Y盘大小比PETOOL.WIM文件大2M左右
比如PETOOL.WIM大小是10M,则Y盘大小是12M
非常感谢。。。
作者: 我也爱你    时间: 2014-5-13 23:49
本帖最后由 我也爱你 于 2014-5-13 23:52 编辑

pecmd看了看是没有读取文件尺寸命令的。
变通的方法
可以吧RAMD ImDisk,L52,FAT,Y:,RamdY_TOOLS 制作成一个程序
整个操作有exe的功能来完成!
在INI配置中调用这个exe

先使用fb从UD中取出WIM
然后
exe执行挂载之前先读取wim的尺寸设为一个变量 &WINMB
然后 RAMD ImDisk,L&WINMB,FAT,Y:,RamdY_TOOLS

你也可以问问m大看看是否会更新或者有其他命令


作者: pseudo    时间: 2014-5-13 23:58
0PE统一版代码片段供参考:
  1. for /f "tokens=4" %%i in ('fbinst ^(%udisk%^) info^|find "0PE/0PE.ISO"') do set Usize=%%i
  2. if "%Usize%"=="" goto :eof
  3. set /a Usize=%Usize%+2*1048576
  4. set /a needsize=%Usize%/1024/1024+20
复制代码

其中%udisk%为ud对应盘,例如hd1。0PE/0PE.ISO是ud内文件。
作者: 我也爱你    时间: 2014-5-14 00:44
我也爱你 发表于 2014-5-13 23:49
pecmd看了看是没有读取文件尺寸命令的。
变通的方法
可以吧RAMD ImDisk,L52,FAT,Y:,RamdY_TOOLS 制作成一 ...

fb没太多注意细节,返回UD分区大小和目录大小是可以的
作者: 我也爱你    时间: 2014-5-14 00:48
我也爱你 发表于 2014-5-13 23:49
pecmd看了看是没有读取文件尺寸命令的。
变通的方法
可以吧RAMD ImDisk,L52,FAT,Y:,RamdY_TOOLS 制作成一 ...

另外PECMD支持文件大小返回值!
    │命令│'SIZE'                                                                                      ┃
┃    ├──┼──────────────────────────────────────────────┨
┃    │格式│SIZE <变量名><=><文件目录名>                                                                ┃
┃    ├──┼──────────────────────────────────────────────┨
┃    │功能│返回指定"文件目录"的所占的大小,单位为字节                                                  ┃
┃    ├──┼──────────────────────────────────────────────┨
┃    │参数│■变量名: 用于保存文件目录所占的大小的变量名称;                                            ┃
┃SIZE│    │■文件名: 合法的文件目录名称。                                                              ┃
┃    ├──┼──────────────────────────────────────────────┨
┃    │示例│SIZE iSize=C:\Windows\System32\calc.exe 或 SIZE iSize=C:\Windows\System32                   ┃
┃    ├──┼──────────────────────────────────────────────┨
┃    │备注│※当文件目录名是相对路径时,表示相对于 WinCMD.EXE 的工作目录或配置文件的工作目录;          ┃
┃    │    │※示例1结果是文件"calc.exe"大小,示例2结果是目录"C:\Windows\System32"的大小。   

给出的例子
SIZE mb=C:\bootmgr
mess %mb%
作者: 红毛樱木    时间: 2014-5-14 02:50
pseudo 发表于 2014-5-13 23:58
0PE统一版代码片段供参考:

其中%udisk%为ud对应盘,例如hd1。0PE/0PE.ISO是ud内文件。
  1. for /f %%i in ('fbinst ^(ud^) filesize "USM_TOOL/PETOOLSL.WIM"') do set Wimsize=%%i

  2. set /a Ysize=%Wimsize%/1024+2

  3. pecmd RAMD ImDisk,L%Ysize%,FAT,Y:,RamdY_TOOLS
复制代码



已搞定,感谢。
作者: 我也爱你    时间: 2014-5-14 10:51
我也爱你 发表于 2014-5-14 00:48
另外PECMD支持文件大小返回值!
    │命令│'SIZE'                                                  ...

你可以先用fb释放指定文件到 tools

作者: 我也爱你    时间: 2014-5-14 11:11
红毛樱木 发表于 2014-5-14 02:50
已搞定,感谢。

pseudo的那个方式才是直接的解决方法,值得学习!!
我那个是一时半会没了解fb的其他方式作用。不过也是个变通方法
作者: m68    时间: 2014-5-14 13:30
进来看看学习,谢谢分享经验!
作者: icevan    时间: 2014-10-4 23:46
本帖最后由 icevan 于 2014-10-4 23:58 编辑

我之前遇到过这个问题。

http://bbs.l3.wuyou.com/forum.ph ... 9&fromuid=30363

最终的是
@echo off
setlocal ENABLEDELAYEDEXPANSION
fbinst (ud) filesize "UDTOOLS/%1"
if not %errorlevel%==-1 (
   set size=%errorlevel%
   if exist "y:\uramdisk.txt" (
      set /a size=!size!+100
      imdisk -e -s !size!K -m W:
   ) else (
      set /a size=!size!+2600
      imdisk -a -s !size!K -m W: -p "/FS:NTFS /V:UdTemp /Y /Q"
   )
) else (
      exit
)
fbinst (ud) output "UDTOOLS/%1" W:/%%~nx
echo ramdisk=!size!K >>y:\uramdisk.txt




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