Board logo

标题: 请教:解压文件到虚拟内存盘关硬盘么事? [打印本页]

作者: bc12060101     时间: 2006-6-2 17:28    标题: 请教:解压文件到虚拟内存盘关硬盘么事?

列位看官及大侠:
      在DOS下使用批处理命令将压缩的CAB文件解压到内存中虚拟的磁盘上时,与硬盘的状态(分区表错误、未格式化、非FAT32格式或无硬盘等等)有关系么?

问题的由来:
      制作一启动盘,在硬盘为Fat32格式且已格式化状态下使用时,一切正常!但在摘除硬盘或硬盘未分区、未格式化、分区表错误等状态下,使用该启动盘可引导进入dos,虚拟内存盘也已建立,但本应在启动过程中解压到RAMD的文件(程序)未能解压。何解?
      解压文件到内存还得看硬盘的脸色?又不是他(硬盘)家的地盘!

嘿嘿,不才困惑不已,还望各位点拨。

(可以肯定 autoexec.bat 文件绝无问题)
作者: DOSforever     时间: 2006-6-2 18:13
未能解压的具体提示是什么
作者: Scott0902     时间: 2006-6-2 18:56
看看路径有没有指向C盘
在看看path变量
作者: 不得不爱     时间: 2006-6-2 21:27
有些启动盘要那硬盘来保存临时文件!
作者: bc12060101     时间: 2006-6-2 22:40
首先感谢楼上三位大侠做答!
我前面已经申明, autoexec.bat 文件绝无问题,且在硬盘为Fat32格式且已格式化状态下使用时,一切正常!
      经过测试发现,只需将压缩包的压缩率减小一些,在“问题硬盘”上不能解压的问题就消失了!
     一个实例:将win98se原版启动盘内的ebd.cab文件解压后重新压缩(增大压缩比率)后装回原启动盘内,进行测试就出现我在前面叙述的问题:仅在“问题硬盘”时发生无法解压现象!将压缩比率减小再试,则又一切恢复正常。
      从上面的事例我们可以看到,似乎压缩文件的压缩率与硬盘存在某种“关系”,到底是何“关系”呢?还望大侠们指点迷津。
附上win98启动盘的autoexec.bat 及setramd.bat文件

autoexec.bat
---------------------
@ECHO OFF
set EXPAND=YES
SET DIRCMD=/O:N
set LglDrv=27 * 26 Z 25 Y 24 X 23 W 22 V 21 U 20 T 19 S 18 R 17 Q 16 P 15
set LglDrv=%LglDrv% O 14 N 13 M 12 L 11 K 10 J 9 I 8 H 7 G 6 F 5 E 4 D 3 C
cls
call setramd.bat %LglDrv%
set temp=c:\
set tmp=c:\
path=%RAMD%:\;a:\;%CDROM%:\
copy command.com %RAMD%:\ > NUL
set comspec=%RAMD%:\command.com
copy extract.exe %RAMD%:\ > NUL
copy readme.txt %RAMD%:\ > NUL

:ERROR
IF EXIST ebd.cab GOTO EXT
echo Please insert Windows 98 Startup Disk 2
echo.
pause
GOTO ERROR

:EXT
%RAMD%:\extract /y /e /l %RAMD%: ebd.cab > NUL
echo The diagnostic tools were successfully loaded to drive %RAMD%.
echo.

IF "%config%"=="NOCD" GOTO QUIT
IF "%config%"=="HELP" GOTO HELP
LH %ramd%:\MSCDEX.EXE /D:mscd001 /L:%CDROM%
echo.
GOTO QUIT

:HELP
cls
call help.bat
echo Your computer will now restart and the startup menu will appear.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
restart.com
GOTO QUIT

:QUIT
echo To get help, type HELP and press ENTER.
echo.
rem clean up environment variables
set CDROM=
set LglDrv=
--------------------------

setramd.bat
---------------------------
@echo off
set RAMD=
set CDROM=

echo.
echo Preparing to start your computer.
echo This may take a few minutes. Please wait...
echo.

a:\findramd

if errorlevel 255 goto no_ramdrive

if not errorlevel 3 goto no_ramdrive

goto do_shift

:loop
if errorlevel %1 goto no_shift

:do_shift
set cdrom=%2
shift
shift
if not %1*==* goto loop
goto no_ramdrive

:no_shift
set ramd=%2

if "%RAMD%"=="C" goto c_drive

goto success

:c_drive
echo Windows 98 has detected that drive C does not contain a valid FAT or
echo FAT32 partition. There are several possible causes.
echo.
echo 1.  The drive may need to be partitioned. To create a partition on the drive,
echo run FDISK from the MS-DOS command prompt.
echo.
echo 2.  You may be using third-party disk-partitioning software. If you are using
echo this type of software, remove the Emergency Boot Disk and restart your
echo computer. Then, follow the on-screen instructions to start your computer from
echo a floppy disk.
echo .
echo 3.  Some viruses also cause your drive C to not register. You can use a virus
echo scanning program to check your computer for viruses.
echo.
goto success

:no_ramdrive
echo The Windows 98 startup disk could not create a temporary drive for the
echo diagnostic tools. This may be because this computer has less than the  
echo minimum required extended memory.  
echo.
:success
------------------------------
作者: tsenix     时间: 2006-6-2 23:12
启动盘的物理格式是什么? 软盘或是光盘?
作者: Wengier     时间: 2006-6-2 23:38
EXTRACT命令在一些情况下需要临时用于解压的硬盘空间。
作者: zjnbwdj     时间: 2006-6-3 01:31
这还不是AUTOEXEC.BAT的事?问题就在于
set temp=c:\
set tmp=c:\
压缩率大的时候,解压时产生的临时文件存放路径指向了你所谓的"问题硬盘"C:\,当硬盘未格式化,分区表错误,或者在卸下硬盘而虚拟盘又过于小的情况下,就会出现此类问题.
作者: bc12060101     时间: 2006-6-3 10:29
to 7楼&8楼:
谢两位仁兄指点!
请问EXTRACT命令在何种情况下“需要临时用于解压的硬盘空间”,若如8楼老兄所言“压缩率大的时候,............”,那么又是什么在检测文件的压缩比率并将解压路径指向temp?是EXTRACT吗?
zjnbwdj兄,兄弟不才,对于AUTOEXEC.BAT中的 set temp=c:\  及 set tmp=c:\  一直不解,经您指点,好像离明白已经不远了。

to 6楼老兄:
软盘及光盘均存在此问题!

[ Last edited by bc12060101 on 2006-6-3 at 10:34 ]
作者: 不得不爱     时间: 2006-6-3 19:28
如果将
set temp=c:\
set tmp=c:\
改为
set temp=%RAMD%
set tmp=%RAMD%
就会与硬盘无关了!
当然内存盘就要加大容量!
作者: bc12060101     时间: 2006-6-3 20:57
嘿嘿,谢qwe1234567版主!又学了一招。
其实,如若不想与硬盘有关联的话,除了您介绍的方法外,适当控制压缩文件的压缩率即可(虽然,这个方法仅仅是试出来的,还有待理论上的支持) 。
之所以提出“解压文件到虚拟内存盘关硬盘么事”的问题,是想求解到底是什么在监控压缩文件的压缩率及其解压过程?是EXTRACT吗?如果是的话,不用EXTRACT是否就可以最大限度的压缩文件了?
还望大侠们继续点拨。
作者: bc12060101     时间: 2006-6-5 15:44
顶一下!
请大侠们不吝赐教!
到底是什么在监控压缩文件的压缩率及其解压过程?是EXTRACT吗?若是的话,那么EXTRACT命令在何种情况下需要临时使用硬盘空间以用于解压?
作者: 不得不爱     时间: 2006-6-6 07:48
如果是自解压的话就可以不要任何的盘做临时文件和文件夹了!
“解压文件到虚拟内存盘关硬盘么事”是因为EXTRACT在解压时需要临时文件和临时文件夹!
作者: bc12060101     时间: 2006-6-6 11:31
qwe1234567版主 !
您介绍的两种方法都能很好的解决“关硬盘的事”的问题,非常感谢!

作为一个已经发生的问题,我很想搞清其原委,是故才不断的“纠缠”于.cab压缩格式及是何、为何“关硬盘的事”?但愿没有使您很烦。嘿嘿

从您及其他大侠的解说中我已知道EXTRACT在解压时需要临时文件和临时文件夹!但我还知道当压缩率较小时解压不“关硬盘的事”!有鉴于此,才产生了EXTRACT究竟是否存在监测.cab压缩文件压缩率的问题!换句话讲就是EXTRACT是否仅当压缩率大时才需借用临时文件夹、而压缩率小时则不必借用临时文件夹。因为从表象可以看到的确存在不同的压缩率其解压过程不同(压缩率大的文件解压时才“关硬盘的事”)。

上述问题的答案似乎是肯定的,但兄弟才疏学浅,是故恳请您及各位大侠予以明示。
作者: 不得不爱     时间: 2006-6-6 11:44
这个就不清楚了,我还没有遇到压缩率小时不必借用临时文件(夹)的事,无法给你解答!
作者: bc12060101     时间: 2006-6-6 14:26
qwe1234567版主 :
原版win98启动盘就是一个很好的例子!即使没有硬盘,也不会影响其盘中ebd.cab压缩包解压到虚拟内存盘上。我前面已介绍过:

一个实例:将win98se原版启动盘内的ebd.cab文件解压后重新压缩(增大压缩比率)后装回原启动盘内,进行测试就出现我在前面叙述的问题:仅在“问题硬盘”时发生无法解压现象!将压缩比率减小再试,则又一切恢复正常。

您愿意试一下吗?
实在不好意思,像我这样死缠烂打让人烦的但愿您见得不多。
作者: 不得不爱     时间: 2006-6-6 16:58
除非是你把BAT文件给改了!
作者: 不得不爱     时间: 2006-6-6 17:10
你是不是将文件加大了?
作者: bc12060101     时间: 2006-6-6 17:39
报告qwe1234567版主 :
除了变更压缩包的压缩比率之外,什么都没有动过!

[ Last edited by bc12060101 on 2006-6-7 at 14:33 ]
作者: 不得不爱     时间: 2006-6-6 21:56
大概是编码改变了引起的吧!
作者: bc12060101     时间: 2006-6-6 22:16
嘿嘿,编码改变?
压缩率从LZX<15>到LZX<21>,外加MSZIP共8级,哪级改变了哪级未改变?这种解释未免牵强了吧。
实在不好意思,如此死追不放的咬住一个问题,实在是难为您了。非常感谢予以做答。
作者: bc12060101     时间: 2006-6-7 14:41
顶一下!
本坛高手如云,大家真的都忙得无暇指教一下吗?
实在不愿相信真的无人能给出一个令人信服的答案。