![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-03 10:52 |
共 48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 纯DOS下FOR语句执行,字符筛选得变量问题 |
| 可打印版本 3,301 / 28 |
| 第1楼 jastyg | 发表于 2007-02-05 01:02 |
| 中级用户 发帖 82 积分 219 | |
|
纯DOS下FOR语句执行,字符筛选得变量问题 @echo off
ghost -dd for %%i in (10,9,8,7,6,5,4,3,2,1) do find /i "1.%%i " | if errorlevel 0 set p=%%i | echo %p% ====================================== 以上不能显示出变量P。 不知道错在什么地方。 望指教~~~ [ Last edited by jastyg on 2007-2-7 at 03:44 AM ] |
|
| 第2楼 redtek | 发表于 2007-02-05 06:13 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
其中一个错误在这里: if errorlevel 0 set p=%%i | echo %p%
设置变量与显示一个变量不要利用管道的特性而将它们写在同一行中:) ghost -dd 执行完后是不是要生成一个文件?而 find /i "1.%%i " 指令要在上面生成的这个文件中检索吧? ghost -dd 执行后生成的文件就是要被检索的文件,是不是楼主忘了把这个名字给 find 了? [ Last edited by redtek on 2007-2-4 at 09:03 PM ] |
|
| 第3楼 anqing | 发表于 2007-02-05 07:24 |
| 高级用户 发帖 413 积分 859 | |
|
find /i "1.%%i [ibm_service]"
是在[ibm_service]中,找1.%%i字符串吗? 是这个意思吗? |
|
| 第4楼 jastyg | 发表于 2007-02-05 11:33 |
| 中级用户 发帖 82 积分 219 | |
|
ghost -dd >nul
for %%i in (15,14,13,12,11,10,9,8,7,6,5,4,3,2,1) do find /i "1.%%i: [ibm_service]" ghststat.txt | if errorlevel 1 set p=%%i 我原来这样写的,谢谢2楼朋友指正。 你说的不能在同一行,那怎么解决我这个问题 3楼朋友,你说的没错,就这个意思 |
|
| 第5楼 NaturalJ0 | 发表于 2007-02-05 21:33 |
| 银牌会员 发帖 533 积分 1,181 | |
|
for %%i in (15,14,13,12,11,10,9,8,7,6,5,4,3,2,1) do call :FIND %%i
GOTO :END :FIND find /i "1.%1: [ibm_service]" ghststat.txt if errorlevel 1 set p=%1 :END 这样也许可以 |
|
| 第6楼 jastyg | 发表于 2007-02-06 04:34 |
| 中级用户 发帖 82 积分 219 | |
|
楼上朋友能做个大概的解释么?
%dbg%是什么意思? FOR里用的是%%i,怎么下面就用%l了?什么意思? [ Last edited by jastyg on 2007-2-6 at 06:01 AM ] |
|
| 第7楼 redtek | 发表于 2007-02-06 05:52 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
不好意思,刚发现我6楼写的代码是错误的(删掉了)。
在原代码中: find /i "1.%1: " ghststat.txt 从命令上看,是要在 ghststat.txt 文件中检索含有 1.1(或一直到 1.15): 在同一行的字符串。 刚才我分了两个区,在D盘设置卷标为 IBM_SERVICE 来模拟兄所说的那个分区标置好做实验,结果发现在 ghststat.txt 文件中根本就没有在同一行的类似 1.1 .. 或 1.10: 等这样的标置,……它只有 的节,在节下面有很多项(我不懂一键还原以及命令行下使用参数直接操作 ghost ,所以我不太清楚 1.1 .... 1.15 这些含意。 即,find /i "1.%1: " ghststat.txt 命令找不到 类似在同一行中的标置。
除红色标示的 之外我找不到 1.1: 一直到 1.15: 之间变化的内容。或许是我这里生成的这个文件与兄所在磁盘生成的文件有些区别或是其它原因…… 是我没看清标题与不懂 Ghsot 到底这些参数都是什么…… 希望了解IBM一键还原以及熟悉具体要提及 ghststat.txt 的哪些内容和具体格式的网友能帮兄写上解决代码:) [ Last edited by redtek on 2007-2-5 at 05:06 PM ] |
|
| 第8楼 jastyg | 发表于 2007-02-06 11:17 |
| 中级用户 发帖 82 积分 219 | |
|
由于GDISK在DELL的机器上运行会死机(GDISK11没试过),所以打算用这个方法对最后的分区进行定位
我不清楚你的怎么会这样,但我在我的机器和别的机器上的GHSTAT结果都跟你不同,你看我的。 ********************************* Date : Mon Feb 5 22:10:45 2007 Error Number: (0) Message: Stats Dump Version: 11.0.0.1502 (Dec 4 2006, Build=1502) OS Version: DOS v7.10 Command line arguments: -dd Active Switches : AutoName PathName : DumpFile : DumpPos : 0 FlagImplode : 0 FlagExplode : 0 Operation Details : Total size.........0 MB copied..........0 MB remaining.......0 Percent complete...0% Speed..............0 MB/min Time elapsed.......0:00 Time remaining.....0:00 Program Call Stack sub_main main Call Stack 0x0039623c 0x0009cbd1 0x0000307e 0x00004ce1 0x00003f2f 0x0039f468 End Call Stack Start heap available: 247726080 Cur heap available: 247529472 Total Memory: 255197184 Allocated 1024 DpmiDjgpp.cpp:56 33504 ghost.cpp:1394 64 DiskDriveAccessExInt13.cpp:139 48 DiskDriveAccessExInt13.cpp:139 528 IdeDmaServerPci.cpp:127 528 IdeDmaServerPci.cpp:127 Free 80 DiskDriveAccessExInt13.cpp:102 2048 DiskDriveAccessInt13.cpp:184 32768 BlockDeviceDosDrive.cpp:392 Fat details: NTFS details: ---------------- NTFS Global Flags: ---------------- contiguousWrite=1 forceDiskClusterMapping=0 inhibitCHKDSK=1 ignoreBadLog=0 ignoreCHKDSKBit=0 enable_cache=0 xfrbuflen=0 last_attr_type = 0 loadExact = 0 ---------------- Disk Info : remote.............0 drive..............0 sectorsUsedCount.......62910288 estimatedUsedCount.....0 numPartitions..............4 Version............0 # Ord Boot Id Ext First Num Last Used NTFS 0 0 1 7 No 63 15727572 15727635 0 No 1 1 0 b Yes 15727698 26716032 42443730 0 No 2 2 0 b Yes 42443793 16916382 59360175 0 No 3 3 0 1c No 59360238 3550302 62910540 0 No Disk Info : remote.............0 drive..............0 sectorsUsedCount.......0 estimatedUsedCount.....0 numPartitions..............0 Version............0 # Ord Boot Id Ext First Num Last Used NTFS Fixed Drives Drive 128 Int 13h Total Sectors 15454530 Bytes per Sector 512 MB 7546 Cylinders 962 Heads 255 Sectors per Track 63 Successful IO Count 0 Extended Int 13h (Active) Total Sectors 62914560 Bytes per Sector 512 MB 30720 Successful IO Count 138 Floppy Drives Drive 0 NECVMWar VMware IDE CDR01 1.00 Int 13h Total Sectors 2880 Bytes per Sector 2048 MB 5 Cylinders 80 Heads 2 Sectors per Track 18 Successful IO Count 0 Extended Int 13h Total Sectors 2097151 Bytes per Sector 2048 MB 4095 Successful IO Count 0 ASPI (Active) Total Sectors 27709 Bytes per Sector 2048 MB 54 Successful IO Count 1 Drive 1 Int 13h (Active) Total Sectors 2880 Bytes per Sector 512 MB 1 Cylinders 80 Heads 2 Sectors per Track 18 Successful IO Count 1 Remote Drives AsyncIo : 0 Image Devices Key[1] 1.1: Key[2] 1:1 Path 1.1: Desc 1.1: [] Type NTFS Disk 0 Offset 63 Key[1] 1.2: Key[2] 1:2 Key[3] C: Path C: Desc C: 1.2: [] Type FAT Disk 0 Offset 15727698 Key[1] 1.3: Key[2] 1:3 Key[3] D: Path D: Desc D: 1.3: [] Type FAT Disk 0 Offset 42443793 Key[1] 1.4: Key[2] 1:4 Path 1.4: Desc 1.4: [IBM_SERVICE] Type FAT Disk 0 Offset 59360238 Key[1] A: Path A: Desc A: Type Floppy Key[1] B: Path B: Desc B: Type Floppy Key[1] E: Path E: Desc E: [NEW] Type CD Key[1] X: Path X: Desc X: [MS-RAMDRIVE] Type Disk Key[1] @CD-R1 Path @CD-R1 Desc @CD-R1 NECVMWarVMware IDE CDR01 Type CD ConvMemoryAllocationFactoryDpmi diagnostic... ============================================= Conventional Memory Initial Conventional Memory Size = 481264 Current Conventional Memory Size = 410608 Allocated 1024 DpmiDjgpp.cpp:56 33504 ghost.cpp:1394 64 DiskDriveAccessExInt13.cpp:139 48 DiskDriveAccessExInt13.cpp:139 528 IdeDmaServerPci.cpp:127 528 IdeDmaServerPci.cpp:127 Free 80 DiskDriveAccessExInt13.cpp:102 2048 DiskDriveAccessInt13.cpp:184 32768 BlockDeviceDosDrive.cpp:392 DiskManager diagnostic... ========================= Fixed Drives Drive 128 Int 13h Total Sectors 15454530 Bytes per Sector 512 MB 7546 Cylinders 962 Heads 255 Sectors per Track 63 Successful IO Count 0 Extended Int 13h (Active) Total Sectors 62914560 Bytes per Sector 512 MB 30720 Successful IO Count 138 Floppy Drives Drive 0 NECVMWar VMware IDE CDR01 1.00 Int 13h Total Sectors 2880 Bytes per Sector 2048 MB 5 Cylinders 80 Heads 2 Sectors per Track 18 Successful IO Count 0 Extended Int 13h Total Sectors 2097151 Bytes per Sector 2048 MB 4095 Successful IO Count 0 ASPI (Active) Total Sectors 27709 Bytes per Sector 2048 MB 54 Successful IO Count 1 Drive 1 Int 13h (Active) Total Sectors 2880 Bytes per Sector 512 MB 1 Cylinders 80 Heads 2 Sectors per Track 18 Successful IO Count 1 The following devices do not use an IRQ: (0x00, 0x00, 0x00): IRQ: 0x00, INT#: -, Link: 0x00 Class: Bridge, SubClass: Host/PCI Vendor: 0x8086, Device: 0x7190, RoutePINS: 0x60, 0x61, 0x62, 0x63, (0x00, 0x01, 0x00): IRQ: 0x00, INT#: -, Link: 0x00 Class: Bridge, SubClass: PCI/PCI Vendor: 0x8086, Device: 0x7191, RoutePINS: 0x60, 0x61, 0x00, 0x00, (0x00, 0x07, 0x00): IRQ: 0x00, INT#: -, Link: 0x00 Class: Bridge, SubClass: PCI/ISA Vendor: 0x8086, Device: 0x7110, RoutePINS: 0x60, 0x61, 0x62, 0x63, (0x00, 0x07, 0x01): IRQ: 0xff, INT#: -, Link: 0x00 Class: Mass Storage, SubClass: IDE Controller Vendor: 0x8086, Device: 0x7111, RoutePINS: 0x60, 0x61, 0x62, 0x63, (0x00, 0x07, 0x03): IRQ: 0x00, INT#: -, Link: 0x00 Class: Bridge, SubClass: Other Bridge Vendor: 0x8086, Device: 0x7113, RoutePINS: 0x60, 0x61, 0x62, 0x63, (0x00, 0x0f, 0x00): IRQ: 0xff, INT#: -, Link: 0x00 Class: Display, SubClass: VGA compatible Vendor: 0x15ad, Device: 0x0405, RoutePINS: 0x60, 0x61, 0x62, 0x63, The following hard wire-ord devices share IRQ 11: (0x00, 0x10, 0x00): IRQ: 0x0b, INT#: A, Link: 0x61 Class: Mass Storage, SubClass: SCSI Controller Vendor: 0x104b, Device: 0x1040, RoutePINS: 0x61, 0x62, 0x63, 0x60, The following hard wire-ord devices share IRQ 10: (0x00, 0x11, 0x00): IRQ: 0x0a, INT#: A, Link: 0x62 Class: Network, SubClass: Ethernet Vendor: 0x1022, Device: 0x2000, RoutePINS: 0x62, 0x63, 0x60, 0x61, The following hard wire-ord devices share IRQ 9: (0x00, 0x07, 0x02): IRQ: 0x09, INT#: D, Link: 0x63 Class: Serial Bus, SubClass: USB UHCI Vendor: 0x8086, Device: 0x7112, RoutePINS: 0x60, 0x61, 0x62, 0x63, (0x00, 0x12, 0x00): IRQ: 0x09, INT#: A, Link: 0x63 Class: Multimedia, SubClass: Audio Vendor: 0x1274, Device: 0x1371, RoutePINS: 0x63, 0x60, 0x61, 0x62, FilesystemManager diagnostic... =============================== Volume 1 VolumePos: 1.2: DriveLetter: C: Description: 12.74GB Logical Disk 0 Offset 7.50GB 12.74GB Type: fsfFat32 Name: Volume 2 VolumePos: 1.3: DriveLetter: D: Description: 8.07GB Logical Disk 0 Offset 20.24GB 8.07GB Type: fsfFat32 Name: Volume 3 VolumePos: 1.1: DriveLetter: Description: 7.50GB Primary Disk 0 Offset 31.50KB 7.50GB Type: fsfNtfsWindowsXP Name: Volume 4 VolumePos: 1.4: DriveLetter: Description: 1.69GB Primary Disk 0 Offset 28.31GB 1.69GB Type: fsfFat32 Name: IBM_SERVICE FilesystemMounter diagnostic... =============================== LfoFilesystemManager diagnostic... ================================== Filesystem Index: 0 Filesystem Descriptor: ID's: ID Type: 2 ID: A: DriveType: 2 No FilesystemInfo structure. Filesystem has no VolumePtr Filesystem Index: 1 Filesystem Descriptor: ID's: ID Type: 2 ID: B: DriveType: 2 No FilesystemInfo structure. Filesystem has no VolumePtr Filesystem Index: 2 Filesystem Descriptor: ID's: ID Type: 2 ID: C: ID Type: 1 ID: 1.2: DriveType: 4 FilesystemInfo: formatType: 3 volumeName: Filesystem Index: 3 Filesystem Descriptor: ID's: ID Type: 2 ID: D: ID Type: 1 ID: 1.3: ID Type: 4 ID: : DriveType: 4 FilesystemInfo: formatType: 3 volumeName: Filesystem Index: 4 Filesystem Descriptor: ID's: ID Type: 2 ID: E: DriveType: 8 No FilesystemInfo structure. Filesystem has no VolumePtr Filesystem Index: 5 Filesystem Descriptor: ID's: ID Type: 2 ID: X: DriveType: 32 No FilesystemInfo structure. Filesystem has no VolumePtr Filesystem Index: 6 Filesystem Descriptor: ID's: ID Type: 1 ID: 1.1: DriveType: 4 FilesystemInfo: formatType: 8 volumeName: Filesystem Index: 7 Filesystem Descriptor: ID's: ID Type: 1 ID: 1.4: ID Type: 4 ID: IBM_SERVICE: DriveType: 4 FilesystemInfo: formatType: 3 volumeName: IBM_SERVICE ********************************* 不管怎么说,先对你说声谢谢!! |
|
| 第9楼 redtek | 发表于 2007-02-06 11:40 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
看到了~:)
Desc 1.4: 兄生成的文件中有这句,我生成的文件中没有 1.4 或与之类似的数字,我在虚拟机中分了2个区(FAT32),没有NTFS分区,会不会与这相关? 我再用兄的这个生成的文件试一下能否检索出来:)
可以了,用兄生成的文件可以成功检索到,兄再试一下看看能不能用:) =========================================== 代码中: 第17行:将从for中依次提取检索的数字与 1.%%i: 字符串相匹配的数字存放变量P中。 将来要调用这个找到的数字时,就使用变量 %P% 第07行:通过for枚举每一个数字,使用call来模拟递归调用并带入%%i依次枚举出的数字。 当通过call调用时,是在调用自己,所带的参数将被主代码识别为 %1。 第04行:专为递归调用做准备。 如果有代码call自己(第07行call的),那么一定有%1的参数,所以就转到:SEARCH段处理。 如果发现没有参数,那么说明是正常运行,不是被程序调用。 当成功检索到与 相匹配的数字时,会存放变量 %P%中,所以在第18行可以插入自己的代码(如进行 Ghost 备份或恢复……) [ Last edited by redtek on 2007-2-7 at 10:20 AM ] |
|
| 第10楼 jastyg | 发表于 2007-02-07 00:38 |
| 中级用户 发帖 82 积分 219 | |
|
谢谢,十分感谢.晚上我回去试一下.
不知道兄知道如何用XSET,解决这个问题么?(题外话) %dbg%是什么意思?多谢兄的代码和详细解释. |
|
| 第11楼 redtek | 发表于 2007-02-07 00:57 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
echo %dbg% off
为了方便调试。想看到运行过程或是错误发生在哪里。就得 echo on ,然后脚本存盘再试运行,改完错误后再改回来 echo off 。 有时候这样来回来去的调试要数十次,就得 echo on /off 之间来回来去的改,还要存盘,太麻烦…… 于是 echo %dbg% off ,平时 %dbg% 变量是空的,还没赋值,所以一运行的时候系统就默认为 echo off :) 当我在命令行上直接输入: SET DBG=ON 时,就有了这个变量,再运行批处理时,遇到 Echo %dbg% off 就会转变成: echo on off (但只要 echo 后面有一个on 就行了)就可以看到调试信息了。 等不想调试时,就在命令行上键入 SET DBG= 等号后面什么都没有,这样就把这个变量给消了,再运行时就是正常状态:) XSET 没用过~:) |
|
| 第12楼 jastyg | 发表于 2007-02-07 03:31 |
| 中级用户 发帖 82 积分 219 | |
|
太奇妙了.另外想问一个,上次在人家BAT里看到一个命令,可以阻止CTRL+C中断BAT运行的,当时没留意现在想不起来了~~
兄弟知道啊? |
|
| 第13楼 jastyg | 发表于 2007-02-07 03:45 |
| 中级用户 发帖 82 积分 219 | |
|
刚才在坛子里找个小程序:)
|
|
| 第14楼 redtek | 发表于 2007-02-07 04:01 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
在 MS-DOS 里,CONFIG.SYS 配置文件中有一个定义:
BREAK=ON 或是 BREAK=OFF 可以 “允许、禁止扩展 Ctrl+BREAK检查” :) 在 Windows CMD 下的窗口里无效:) 不过,也可以用其它方法办到锁定 Windows CMD 窗口内的键盘使用,只是做起来太麻烦(批处理调用Debug写一小段汇编代码来屏蔽键盘中断可以实现)。 |
|
| 第15楼 jastyg | 发表于 2007-02-07 09:40 |
| 中级用户 发帖 82 积分 219 | |
|
BREAK=ON
试过好象对CTRL+C没效果 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |