无忧启动论坛
标题:
请教一个批处理怎么把它简洁下
[打印本页]
作者:
icevan
时间:
2012-4-14 01:14
标题:
请教一个批处理怎么把它简洁下
我想分别复制几个文件到内存盘.
但一开始不用虚拟一个大的内存盘.需要时在扩容.
内容如下
@echo off
fbinst (ud) filesize "UDTOOLS/NET.*"
set /a size=%errorlevel%*105/100
if exist y:\uramdisk.txt goto next
fbinst --udlist
if not %errorlevel%==-1 imdisk -a -s %size%K -m W: -p "/FS:FAT /V:UdTemp /Y /Q"
goto end
:next
for /f %%i in (y:\uramdisk.txt) do set /a size=%size%+%%i
imdisk -e -s %size%K -m W:
goto end
:end
echo %size%>y:\uramdisk.txt
fbinst (ud) output "UDTOOLS/NET.WIM" W:/
pecmd moun w:\udtools\net.wim,y:\net\,1,%temp%
cd /d y:\net
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
最终我写成这样.请大家帮忙看看有没有什么错误.
@echo off
fbinst (ud) filesize "UDTOOLS/NET.*"
set size=%errorlevel%
if exist "y:\uramdisk.txt" (
set /a size=%size%*105/100
imdisk -e -s %size%K -m W:
) else (
set /a size=%size%*115/100
fbinst --udlist
if not %errorlevel%==-1 imdisk -a -s %size%K -m W: -p "/FS:NTFS /V:UdTemp /Y /Q"
)
if not "%size%"=="" echo ramdisk=%size%K>y:\uramdisk.txt
fbinst (ud) output "UDTOOLS/NET.*" W:/
pecmd moun w:\udtools\net.wim,y:\net\,1,%temp%
cd /d y:\net
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后面跟的都是开关和参数.我这样写法使用有没有问题?
这是我从新修改的.
@echo off
fbinst (ud) filesize "UDTOOLS/office03.*"
if not %errorlevel%==-1 (set size=%errorlevel%) else (goto end)
if exist "y:\uramdisk.txt" goto ext
set /a size=%size%*115/100
imdisk -a -s %size%K -m W: -p "/FS:NTFS /V:UdTemp /Y /Q"
goto :comm
:ext
set /a size=%size%*105/100
imdisk -e -s %size%K -m W:
goto comm
:comm
fbinst (ud) output "UDTOOLS/office03.*" W:/
if %errorlevel%==0 (echo ramdisk=%size%K>y:\uramdisk.txt) else (goto end)
pecmd moun w:\udtools\office03.wim,y:\office03\,1,%temp%
cd /d y:\office03
call insoffice.cmd
pecmd link %userprofile%\桌面\word2003,y:\office03\winword.exe
:end
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
的帮助.
这是我的最终代码
@echo off
setlocal ENABLEDELAYEDEXPANSION
fbinst (ud) filesize "UDTOOLS/rt.*"
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/net.*" W:/
echo ramdisk=!size!K >y:\uramdisk.txt
pecmd moun w:\udtools\net.wim,y:\net\,1,%temp%
cd /d y:\net
复制代码
运行成功.第一次写嵌套的批处理.太高兴了.
非常感谢.
[
本帖最后由 icevan 于 2012-4-17 00:55 编辑
]
欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/)
Powered by Discuz! X3.3