无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 7511|回复: 23
打印 上一主题 下一主题

[高效率版]临睡前灵光一闪,写了个简单的bat

[复制链接]
跳转到指定楼层
1#
发表于 2009-6-17 02:04:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最新增加高效率版 源代码见2楼
已整合到深度PE 4.0
=============
见图...不多说了...该看懂的一下就会看懂了...
源代码如下....实际使用时记得去掉Echo和Pause....

  1. @Echo Off

  2. SET Var0=%0
  3. IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
  4. FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
  5. SET TP=%TP:~0,-1%

  6. For %%b In (*.wim) Do (
  7. Echo PECMD MOUN %TP%\%%b,X:\Programs\%%b\,1
  8. Echo PECMD LOAD X:\Programs\%%b\Main.Ini
  9. Echo.
  10. )

  11. Pause
复制代码

[ 本帖最后由 neo4026 于 2009-6-18 02:10 编辑 ]

wimtest.jpg (95.38 KB, 下载次数: 72)

wimtest.jpg
2#
 楼主| 发表于 2009-6-17 02:07:13 | 只看该作者
PECMD的FORX貌似会返回文件绝对路径 不然直接用PECMD就能搞定了

============================
高效率版
============================
  1. @Echo Off

  2. cd /d "%1"

  3. Echo. > %temp%\WimExtend.INI

  4. For %%b In (*.wim) Do (
  5. Echo MOUN %1\%%b,%MountPath%\%%b\,1>> %temp%\WimExtend.INI
  6. Echo LOAD %MountPath%\%%b\Main.INI >> %temp%\WimExtend.INI
  7. Echo.                              >> %temp%\WimExtend.INI
  8. )

  9. PECMD LOAD %temp%\WimExtend.INI
复制代码

[ 本帖最后由 neo4026 于 2009-6-18 02:55 编辑 ]
回复

使用道具 举报

3#
发表于 2009-6-17 03:04:48 | 只看该作者
本来以为forx应该是可以的

测试了一下,终于明白绝对路径说的是哪里了

原来是每个变量都把wim文件的整个路径也带过去了,那样就没法正确设置挂载目录了

不知有没有办法解决这个问题

老九说

多次调用pecmd的效率要比只调用一次,内部解决效率低很多

[ 本帖最后由 NicTense 于 2009-6-17 10:21 编辑 ]
回复

使用道具 举报

4#
发表于 2009-6-17 08:08:43 | 只看该作者
发现论坛上很多人写的CMD,都有如下代码.

SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
SET TP=%TP:~0,-1%

为什么都这样写呢.我愣是没有明白这样写的原因,有没有人可以赐教一下?

直接%~dp0就可以了,不是吗?
达到上面的效果.也就是获取自身文件的路径并且不用后面的"\"
第一种.
set tp=%~dp0
SET TP=%TP:~0,-1%
我比较常用的一种,但是我不设变量而是直接%~dp0来使用,%~dp0后面是一定会有"\"的
所以如上例子.获取当前目录下的所有WIM文件就是
%~dp0*.wim

第二种.(如果文件在根目录下后面就会有"\",否则效果同上.)
PUSHD %~dp0
set tp=%cd%
popd
回复

使用道具 举报

5#
发表于 2009-6-17 08:58:55 | 只看该作者
原帖由 chenall 于 2009-6-17 08:08 发表
发现论坛上很多人写的CMD,都有如下代码.

SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
SET TP=%TP:~0,-1%

为什么都这样写呢.我愣 ...



支持一个。。。那么没有必要的说。。


另外,neo你的PE,img内核没有开fbwf所以可以启动桌面后挂在wim,,但是fbwf就不行了。。

建议考虑用imdisk虚拟一个y盘。。
回复

使用道具 举报

6#
发表于 2009-6-17 09:00:15 | 只看该作者
还有,neo尽快将标准化的外置方案发贴出来,这样大家可以讨论,尽快实现外置的标准化。。
回复

使用道具 举报

7#
发表于 2009-6-17 09:12:06 | 只看该作者
太深奥的BAT应用,看到我就头痛,还是拿现在的好了。
回复

使用道具 举报

8#
发表于 2009-6-17 09:24:42 | 只看该作者
之前试过这种方法,当存在较多WIM时加载速度比较慢,另外你会发现桌面都已经进入一会了软件还在加载中开始菜单在不断增加快捷方式,当用同样的批处理反向卸下WIM时更慢

楼主批处理水平高,提高下执行效率就完美了

个人认为这种加载方试优于目前绝大部分PE的加载方试,可以真正做到随意增减工具,只要WIM打包
回复

使用道具 举报

9#
发表于 2009-6-17 09:31:38 | 只看该作者
原帖由 chenall 于 2009-6-17 08:08 发表
发现论坛上很多人写的CMD,都有如下代码.

SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
SET TP=%TP:~0,-1%

为什么都这样写呢.我愣 ...



哈哈,我都没去看这段什么意思
回复

使用道具 举报

10#
 楼主| 发表于 2009-6-17 10:11:40 | 只看该作者
原帖由 soyan.xjx 于 2009-6-17 09:24 发表
之前试过这种方法,当存在较多WIM时加载速度比较慢,另外你会发现桌面都已经进入一会了软件还在加载中开始菜单在不断增加快捷方式,当用同样的批处理反向卸下WIM时更慢

楼主批处理水平高,提高下执行效率就完 ...


要提高效率的话简单了
核心代码改为

  1. Echo MOUN %TP%\%%b,X:\Programs\%%b\,1 >> %temp%\wim_temp.ini
  2. Echo LOAD X:\Programs\%%b\Main.Ini >> %temp%\wim_temp.ini
  3. Echo. >> %temp%\wim_temp.ini
复制代码


再在批处理文件末尾 加入

  1. start PECMD LOAD %temp%\wim_temp.ini
复制代码


原帖由 chenall 于 2009-6-17 08:08 发表
发现论坛上很多人写的CMD,都有如下代码.

SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
SET TP=%TP:~0,-1%

为什么都这样写呢.我愣 ...

本人纯属复制粘贴 并不懂其含义 : )
回复

使用道具 举报

11#
发表于 2009-6-17 11:47:30 | 只看该作者
原帖由 chenall 于 2009-6-17 08:08 发表
发现论坛上很多人写的CMD,都有如下代码.

SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
SET TP=%TP:~0,-1%

为什么都这样写呢.我愣 ...


我习惯于第二种,简洁明了,而且我们知道,“C:\”中的“\”是代表根目录的,不是目录分隔符,因此,c:\aaa.bat与c:aaa.bat意义是不同的。

另外,如果大写都约定wim的根下的ini和CMD都是初始化文件的话,也可以在挂载后用形如下述语句进行初始化。
TEAM FORX %WimDir%\*.CMD,TOOLSCMD,0,EXEC =!%TOOLSCMD%|ENVI TOOLSCMD=
TEAM FORX %WimDir%\*.INI,TOOLSINI,0,LOAD %TOOLSINI%|ENVI TOOLSINI=
回复

使用道具 举报

12#
发表于 2009-6-17 11:49:16 | 只看该作者
SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%


如果两边有引号,去掉引号,有没有什么特殊情况下,会把引号也赋给%0的?

FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI


这个我估摸着,应该是最初的作者,以为~dp 这种方式只能在for中使用,因为关于这个的说明好像也是在for/?里的

SET TP=%TP:~0,-1%


这个有可能是他当时的程序,有些地方不需要最后面那个\
回复

使用道具 举报

13#
 楼主| 发表于 2009-6-17 11:54:44 | 只看该作者
原帖由 hhh333 于 2009-6-17 11:47 发表


我习惯于第二种,简洁明了,而且我们知道,“C:\”中的“\”是代表根目录的,不是目录分隔符,因此,c:\aaa.bat与c:aaa.bat意义是不同的。

另外,如果大写都约定wim的根下的ini和CMD都是初始化文件的话, ...

如果这样的话做盘时要小心点了
不然在wim根里放了不该放的东西.....欲哭无泪....^_^
回复

使用道具 举报

14#
发表于 2009-6-17 11:58:12 | 只看该作者
原帖由 hhh333 于 2009-6-17 11:47 发表


TEAM FORX %WimDir%\*.CMD,TOOLSCMD,0,EXEC =!%TOOLSCMD%|ENVI TOOLSCMD=
TEAM FORX %WimDir%\*.INI,TOOLSINI,0,LOAD %TOOLSINI%|ENVI TOOLSINI= ...



这个估计不行的,有些文件本身是有ini的,cmd虽然可以合并,也麻烦
回复

使用道具 举报

15#
 楼主| 发表于 2009-6-17 11:59:42 | 只看该作者
原帖由 NicTense 于 2009-6-17 11:58 发表



这个估计不行的,有些文件本身是有ini的,cmd虽然可以合并,也麻烦

根目录,根目录,ok....
不过我还是觉得我提出那种相对要好的 虽然相对这种没那么兼容 但至少看起来整齐
回复

使用道具 举报

16#
 楼主| 发表于 2009-6-17 12:05:24 | 只看该作者
由于并不是所有的PE都能挂到X盘
我建议在注册表预设变量%MountPath%
统一挂载到这个目录
回复

使用道具 举报

17#
发表于 2009-6-17 12:06:55 | 只看该作者
原帖由 neo4026 于 2009-6-17 11:59 发表

根目录,根目录,ok....
不过我还是觉得我提出那种相对要好的 虽然相对这种没那么兼容 但至少看起来整齐



看来我真的是没睡醒~~~我又看错了,面壁2个小时去
回复

使用道具 举报

18#
发表于 2009-6-17 15:29:19 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

19#
 楼主| 发表于 2009-6-18 02:13:09 | 只看该作者
up up up up....
回复

使用道具 举报

20#
发表于 2009-6-18 08:47:37 | 只看该作者
neo,这个方案直接用在ini中,另外minipe文件夹下建立两个子目录,一个basic一个system,basic包中挂载到X:、Program Files\下,system文件下放IE,网,声,挂载到%systemroom%下。。以后直接将wim放在相应的目录下,不用再修改winpe.ini了,又可降低DIY难度了。呵呵。。

配置文件修改下,如果这个设想实现的话,启动时间还会减小。

不知道autoruns是不是这样的,如果不是,基本和那个机制一样了。。

最近白天忙,公司电脑太垃圾的,neo你知道,256M,82845板子,你看看方案可行性大不,也帮忙测试修改下。。
回复

使用道具 举报

21#
发表于 2009-6-18 09:09:39 | 只看该作者
支持标准化PE外置,一个大包WIM实在是够烦的了,希望66369也借鉴下
回复

使用道具 举报

22#
 楼主| 发表于 2009-6-18 09:40:00 | 只看该作者
原帖由 mapeimapei 于 2009-6-18 08:47 发表
neo,这个方案直接用在ini中,另外minipe文件夹下建立两个子目录,一个basic一个system,basic包中挂载到X:、Program Files\下,system文件下放IE,网,声,挂载到%systemroom%下。。以后直接将wim放在相应的目 ...

见#2
已经实现
回复

使用道具 举报

23#
发表于 2010-5-10 23:08:06 | 只看该作者
暴简单的一个BAT变量展开,搞得这么复杂。对于单字母变量及数字变量,CMD解释器提供了抽取路径各各部分的方法。

以下用L做示例,表示“X:\root\folder\dir\basename.ext”
%~dL  -- 返回驱动器名“X:”
%~pL  -- 返回路径名“\root\folder\dir\”
%~nL  -- 返回主文件名“basename”
%~xL  -- 返回扩展名“.ext”

这些也可组合,如:
%~dpL -- 返回“X:\root\folder\dir\”
%~nxL -- 返回“basename.ext”


因此楼主的BAT可以简写如下:
==================================================================
@echo off

for %%L in (%~dp0*.wim) do (
        echo PECMD MOUN %%L,X:\Programs\%~nL,1
        echo PECMD LOAD X:\Programs\%~nL\Main.Ini
        echo.
)

pause
==================================================================
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-1-24 00:56

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表