Board logo

标题: 请教:如何把文件里的字符和数字,输出给变量? [打印本页]

作者: lianjiang2004     时间: 2006-11-27 00:06    标题: 请教:如何把文件里的字符和数字,输出给变量?

请教:如何把文件里的字符和数字,输出给变量?

文本文件hd1.txt,里面内容如下(例):
Disk  Partitions  Cylinders  Heads  Sectors  Mbytes  Model
  1        7        14593     255      63  114473.5  ST3120026AS

Partition  Status   Type     Volume Label   Mbytes   System   Usage
C:  1        A    PRIMARY                  7538.3  NTFS/HPFS   7%
     2        H    PRIMARY                  7467.7  NTFS/HPFS   7%
     3             EXTENDED                99464.9             87%
D:  4             LOGICAL                 10001.4  NTFS/HPFS   9%
E:  5             LOGICAL                 15006.0  NTFS/HPFS  13%
F:  6             LOGICAL    APPZ         30004.2  FAT32      26%
G:  7             LOGICAL                 44453.3  NTFS/HPFS  39%

要求:
根据设定或输入的盘符(比如set drive=E:),检查hd1.txt,找到E:对应的分区号是5,但是要求type为EXTENDED 后的分区号要减去1,也就是说,输入E:,要求输出4,输入G:,要求输出6。
谢谢。

[ Last edited by lianjiang2004 on 2006-11-27 at 01:30 AM ]
作者: redtek     时间: 2006-11-27 00:54
我在论坛 “搜索” 查询到上面这个贴子楼主这是第二次发同样问题的贴子,
而且在楼主上一次发的贴子里,1楼所提及问题都已经解决过了,
为什么楼主还要再提及同样内容第二次?

请教:如何根据文件里的字符,自动创建目录。【已基本解
http://www.cn-dos.net/forum/view ... ht=%2Blianjiang2004


如果lianjiang2004兄是忘记了上次所发的贴子,可以再加到原贴继续讨论,这样可以跟上参与讨论的思路,且不会产生再一次讨论相同问题的时间与代码上的浪费~:)

[ Last edited by redtek on 2006-11-26 at 11:57 AM ]
作者: lianjiang2004     时间: 2006-11-27 01:07
上次问题只是部分解决,说基本解决是因为换成其它办法,用运行ghost -dd来完成的,但是现在碰到一个新问题,用ghost -dd,生成的分区状态文件好像不能指定位置,只能在当前目录生成。这样在光盘上就没法运行,只能在硬盘上运行。但是gdisk生成的文件,可以自己制定位置,因此又想回到用gdisk来获得盘符对应的分区号,缺点是里面的分区号与ghost里的不对应,也就是把EXTENDED也分配了分区号。

这是上次问题和代码。找出的E:对应的是5,
【但是希望type为EXTENDED 后的分区号要减去1,也就是说,输入E:,要求输出4,输入G:,要求输入6。】
-------------
请教:如何根据文件里的字符,自动创建目录。
缘由:自定义路径及文件名,用ghost来自动备份系统。
1),有设置文件set.ini
里面只有这样一行内容:
1:5:\backup\sys.gho  [这行字符可自行定义]

2),有gdisk生成的硬盘分区文件 hd1.txt
里面内容如下(例):
Disk  Partitions  Cylinders  Heads  Sectors  Mbytes  Model
  1        7        14593     255      63  114473.5  ST3120026AS

Partition  Status   Type     Volume Label   Mbytes   System   Usage
C:  1        A    PRIMARY                  7538.3  NTFS/HPFS   7%
     2        H    PRIMARY                  7467.7  NTFS/HPFS   7%
     3             EXTENDED                99464.9             87%
D:  4             LOGICAL                 10001.4  NTFS/HPFS   9%
E:  5             LOGICAL                 15006.0  NTFS/HPFS  13%
F:  6             LOGICAL    APPZ         30004.2  FAT32      26%
G:  7             LOGICAL                 44453.3  NTFS/HPFS  39%

要求:
根据设置文件及hd1.txt,知道1:5就是Windows下的F盘,如果F盘不存在backup目录的话,自动建立F:\backup这个目录。 Win2k/winXP下用

不知道我的问题讲清楚没有。谢谢各位!
-----------
@echo off
setlocal ENABLEDELAYEDEXPANSION
    for /f "delims=: tokens=1-3" %%i in (set.ini) do (
        set disk=%%i
        set partition=%%j
        set "the_path=%%k"
    )
    for /f "tokens=1,2" %%i in (hd1.txt) do set "%%j=%%i !%%j!"
    for /f "tokens=%disk%" %%i in ("!%partition%!") do set drive=%%i
    echo 磁盘:        %disk%
    echo 分区:        %partition%
    echo 路径:        %the_path%
    echo 盘符:        %drive%
    md %drive%%the_path% || echo 建立目录失败!
    rd %drive%%the_path% || echo 建立目录失败!
pause
goto :eof
------------------

[ Last edited by lianjiang2004 on 2006-11-27 at 01:38 AM ]
作者: namejm     时间: 2006-11-27 02:16

@echo off
:begin
cls
set drive=
set /p drive=请输入盘符:
if not defined drive goto begin
setlocal enabledelayedexpansion
for /f "tokens=1-3" %%i in ('findstr /i "^%drive%" hd1.txt') do (
    set num=%%j
    set /a num-=1
    if "%%k"=="LOGICAL" echo !num!
    set num=
)
pause
goto begin

作者: wang6610     时间: 2006-11-27 02:24
楼主在要纯DOS的答案吧。

[ Last edited by wang6610 on 2006-11-27 at 02:40 AM ]
作者: namejm     时间: 2006-11-27 02:28
  我没有纯DOS下的答案^_^
作者: lianjiang2004     时间: 2006-11-27 02:39
谢谢。怎么运行后无输出结果?
Windows下的亦可。
作者: redtek     时间: 2006-11-27 02:48
是纯DOS下的答案啊?
我说怎么lianjiang2004兄居然会提出这么有意思的问题呢~:)

要是纯DOS下实现取出 hd1.txt 内容,然后找到 hd1.txt 文件内指定的 %drive% 所代表的盘符,
再得到那个盘符后的数字,再计算这个数字的减1操作,然后再赋值给别一个变量,以供其它代码调用,
这一系列的纯DOS下实现……还是运行在光盘上……
(不能向只读光盘写入内容——以至实现上面操作所需的产生临时文件来间接求值的方法也不能使用了)
(不能写盘操作,好象只能 DEBUG 直接写汇编可以得到上面一系列内容--我不会,嘻嘻……)


) 可以光盘启动并建一个虚拟盘,在可写的虚拟盘上操作。
) ……其它方法……

不知道lianjiang2004兄是否完全参阅过超过5种以上的互联网上流行的关于一键GHOST的不同网友编的和不同的方法?
(那些正在流行的一键 GHOST 等太多的流行版本中或许会有第三方工具等可以借鉴)

那上面有答案,可以省去很多步骤并在很短的时间内了解更多的实现方法:)
或者发现另一些可以走的捷径和新工具以及个人开发的某种方便的间接变量操作的工具……

[ Last edited by redtek on 2006-11-26 at 01:52 PM ]
作者: redtek     时间: 2006-11-27 02:50


  Quote:
Originally posted by lianjiang2004 at 2006-11-26 13:39:
谢谢。怎么运行后无输出结果?
Windows下的亦可。

下面代码只是原理操作,无效验无错误判断:
(即,读 hd1.txt 内容,找到指定的盘符,然后得到后面的数字,并将数字减1存到变量中以供调用)

(代码运行于: CMD Shell 非纯DOS)
(纯DOS下的 for 没有 "tokens...." 等这么多参数……)
@echo off
set drive=G:
for /f "tokens=2" %%. in ('findstr /i "%drive%" hd1.txt') do set driveNum=%%.
set /a driveNum=driveNum-1

rem 上面分解成多个步骤,可以根据需要更改~:)
rem 用于减1得到的数字存在 driveNum 变量内,可以随便操作。
echo 得到数字: %driveNum%
[ Last edited by redtek on 2006-11-26 at 01:54 PM ]
作者: lianjiang2004     时间: 2006-11-27 04:27
谢谢各位,