无忧启动论坛

标题: 请教一个批处理怎么把它简洁下 [打印本页]

作者: icevan    时间: 2012-4-14 01:14
标题: 请教一个批处理怎么把它简洁下
我想分别复制几个文件到内存盘.
但一开始不用虚拟一个大的内存盘.需要时在扩容.
内容如下
  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 编辑 ]
作者: icevan    时间: 2012-4-14 01:49
for /f  %%i in (y:\uramdisk.txt) do set /a size=%size%+%%i
这句可以不用了.IMDISK扩容的时候容量大小参数(-s %size%K) 是指增加的大小,而不是总大小.
作者: pseudo    时间: 2012-4-14 14:43
start run.exe
这句是不是不用等待run.exe完毕,批处理会继续运行并退出?

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

现在如果有几个文件。我就要写几个这个批处理。
能不能简化一下只用一个批处理就可以了。
作者: icevan    时间: 2012-4-15 03:16
最终我写成这样.请大家帮忙看看有没有什么错误.

  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
复制代码

作者: icevan    时间: 2012-4-15 04:01
测试失败了.
if not %errorlevel%==-1 imdisk -a -s %size%K -m W: -p "/FS:NTFS /V:UdTemp /Y /Q"
变量%size%始终得不到正确的值.
到底哪里出的问题啊?
作者: pznpt    时间: 2012-4-15 12:45
标题: 回复 #5 icevan 的帖子
不懂fbinst和imdisk命令行的用法,不好妄说。。。
但在if语句块中连续赋值,需开启变量延迟。或用call set/a .....,call imdisk .....
作者: icevan    时间: 2012-4-15 23:11
能讲讲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
复制代码

作者: pznpt    时间: 2012-4-16 00:20
标题: 回复 #8 icevan 的帖子
加上setlocal ENABLEDELAYEDEXPANSION后,再将%包围的变量如%size%改写成!size!形式。
call set也是启用变量延迟,将单%改改成双%。如call set/a size==%%size%%*115/100 ,call imdisk -e -s %%size%%K -m W:
5#代码应该启用变量延迟的。。。
作者: icevan    时间: 2012-4-16 01:08
谢谢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 编辑 ]




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