无忧启动论坛

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

请教一个批处理怎么把它简洁下

[复制链接]
跳转到指定楼层
1#
发表于 2012-4-14 01:14:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想分别复制几个文件到内存盘.
但一开始不用虚拟一个大的内存盘.需要时在扩容.
内容如下
  1. @echo off
  2. fbinst (ud) filesize "UDTOOLS/NET.*"
  3. set /a size=%errorlevel%*105/100
  4. if exist y:\uramdisk.txt goto next
  5. fbinst --udlist
  6. if not %errorlevel%==-1 imdisk -a -s %size%K -m W: -p "/FS:FAT /V:UdTemp /Y /Q"
  7. goto end

  8. :next
  9. for /f  %%i in (y:\uramdisk.txt) do set /a size=%size%+%%i
  10. imdisk -e -s %size%K -m W:
  11. goto end

  12. :end
  13. echo %size%>y:\uramdisk.txt
  14. fbinst (ud) output "UDTOOLS/NET.WIM" W:/
  15. pecmd moun w:\udtools\net.wim,y:\net\,1,%temp%
  16. cd /d y:\net
  17. start run.exe
复制代码
这样写有没有问题?
还有
if not %errorlevel%==-1 imdisk -a -s %size%K -m W: -p "/FS:FAT /V:UdTemp /Y /Q"
这句如果失败了就直接退出批处理又该怎么写?
还有.
start run.exe
这句是不是不用等待run.exe完毕,批处理会继续运行并退出?
问题有点多.请大家帮助下.
谢谢!

[ 本帖最后由 icevan 于 2012-4-14 01:17 编辑 ]
2#
 楼主| 发表于 2012-4-14 01:49:11 | 只看该作者
for /f  %%i in (y:\uramdisk.txt) do set /a size=%size%+%%i
这句可以不用了.IMDISK扩容的时候容量大小参数(-s %size%K) 是指增加的大小,而不是总大小.
回复

使用道具 举报

3#
发表于 2012-4-14 14:43:59 | 只看该作者
start run.exe
这句是不是不用等待run.exe完毕,批处理会继续运行并退出?

是。
回复

使用道具 举报

4#
 楼主| 发表于 2012-4-14 15:19:12 | 只看该作者
我的目的是先检查 UD区的指定文件A的大小,然后创建一个能放下这个文件的内存盘。
复制文件A到这个内存盘后使用。
后面我想要用另一个文件B。如果先前已经创建过内存盘。这时就可以扩容它。然后复制
文件B。

现在如果有几个文件。我就要写几个这个批处理。
能不能简化一下只用一个批处理就可以了。
回复

使用道具 举报

5#
 楼主| 发表于 2012-4-15 03:16:56 | 只看该作者
最终我写成这样.请大家帮忙看看有没有什么错误.

  1. @echo off
  2. fbinst (ud) filesize "UDTOOLS/NET.*"
  3. set size=%errorlevel%
  4. if exist "y:\uramdisk.txt" (
  5. set /a size=%size%*105/100
  6. imdisk -e -s %size%K -m W:
  7.    ) else (
  8. set /a size=%size%*115/100
  9.         fbinst --udlist
  10.         if not %errorlevel%==-1 imdisk -a -s %size%K -m W: -p "/FS:NTFS /V:UdTemp /Y /Q"
  11. )
  12. if not "%size%"=="" echo ramdisk=%size%K>y:\uramdisk.txt
  13. fbinst (ud) output "UDTOOLS/NET.*" W:/
  14. pecmd moun w:\udtools\net.wim,y:\net\,1,%temp%
  15. cd /d y:\net
  16. start run.exe
复制代码
回复

使用道具 举报

6#
 楼主| 发表于 2012-4-15 04:01:49 | 只看该作者
测试失败了.
if not %errorlevel%==-1 imdisk -a -s %size%K -m W: -p "/FS:NTFS /V:UdTemp /Y /Q"
变量%size%始终得不到正确的值.
到底哪里出的问题啊?
回复

使用道具 举报

7#
发表于 2012-4-15 12:45:17 | 只看该作者

回复 #5 icevan 的帖子

不懂fbinst和imdisk命令行的用法,不好妄说。。。
但在if语句块中连续赋值,需开启变量延迟。或用call set/a .....,call imdisk .....
回复

使用道具 举报

8#
 楼主| 发表于 2012-4-15 23:11:14 | 只看该作者
能讲讲call set/a 是怎么回事吗?
我直接在原来的代码前加上
setlocal ENABLEDELAYEDEXPANSION
还是不行.
fbinst和imdisk后面跟的都是开关和参数.我这样写法使用有没有问题?

这是我从新修改的.

  1. @echo off
  2. fbinst (ud) filesize "UDTOOLS/office03.*"
  3. if not %errorlevel%==-1 (set size=%errorlevel%) else (goto end)
  4. if exist "y:\uramdisk.txt" goto ext
  5. set /a size=%size%*115/100
  6. imdisk -a -s %size%K -m W: -p "/FS:NTFS /V:UdTemp /Y /Q"
  7. goto :comm

  8. :ext
  9. set /a size=%size%*105/100
  10. imdisk -e -s %size%K -m W:
  11. goto comm

  12. :comm
  13. fbinst (ud) output "UDTOOLS/office03.*" W:/
  14. if %errorlevel%==0 (echo ramdisk=%size%K>y:\uramdisk.txt) else (goto end)
  15. pecmd moun w:\udtools\office03.wim,y:\office03\,1,%temp%
  16. cd /d y:\office03
  17. call insoffice.cmd
  18. pecmd link %userprofile%\桌面\word2003,y:\office03\winword.exe

  19. :end
  20. exit
复制代码
回复

使用道具 举报

9#
发表于 2012-4-16 00:20:57 | 只看该作者

回复 #8 icevan 的帖子

加上setlocal ENABLEDELAYEDEXPANSION后,再将%包围的变量如%size%改写成!size!形式。
call set也是启用变量延迟,将单%改改成双%。如call set/a size==%%size%%*115/100 ,call imdisk -e -s %%size%%K -m W:
5#代码应该启用变量延迟的。。。
回复

使用道具 举报

10#
 楼主| 发表于 2012-4-16 01:08:20 | 只看该作者
谢谢pznpt的帮助.
这是我的最终代码

  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. fbinst (ud) filesize "UDTOOLS/rt.*"
  4. if not %errorlevel%==-1 (
  5.    set size=%errorlevel%
  6.    if exist "y:\uramdisk.txt" (
  7.       set /a size=!size!+100
  8.       imdisk -e -s !size!K -m W:
  9.    ) else (
  10.       set /a size=!size!+2600
  11.       imdisk -a -s !size!K -m W: -p "/FS:NTFS /V:UdTemp /Y /Q"
  12.    )
  13. ) else (
  14.       exit
  15. )
  16. fbinst (ud) output "UDTOOLS/net.*" W:/
  17. echo ramdisk=!size!K >y:\uramdisk.txt
  18. pecmd moun w:\udtools\net.wim,y:\net\,1,%temp%
  19. cd /d y:\net
复制代码

运行成功.第一次写嵌套的批处理.太高兴了.
非常感谢.

[ 本帖最后由 icevan 于 2012-4-17 00:55 编辑 ]
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-2-22 13:36

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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