我有一个名为hdd_list.txt
的文件。
Index: 0
Device Name: \Device\Harddisk0\Partition0
Drive: entire disk
Label:
Type: Harddisk
Size: 55.899GB
Index: 1
Device Name: \Device\Harddisk0\Partition1
Drive: C:\
Label:
Type: Harddisk
Size: 55.897GB
Index: 2
Device Name: \Device\Harddisk1\Partition0
Drive: entire disk
Label:
Type: Harddisk
Size: 465.761GB
Index: 3
Device Name: \Device\Harddisk1\Partition1
Drive: E:\
Label: Backup
Type: Harddisk
Size: 465.758GB
我需要检索与“c:\”对应的Index
数字,然后减去1减去整个磁盘的Index
。
有什么想法吗?
答案 0 :(得分:0)
尝试下一个类似数组的方法:
@ECHO OFF >NUL
SETLOCAL enableextensions enabledelayedexpansion
set /A "ii=-1"
For /F "usebackq tokens=1* delims=:" %%G in (
"D:\bat\StackOverflow\files\30435794.txt") do (
if /I "%%~G"=="Index" set /A "ii+=1"
For /F "tokens=*" %%# in ("%%~H") do set "auxH=%%~#"
set "__%%~G[!ii!]=!auxH!"
if /I "!auxH!"=="C:\" set /A "__indexC=!ii!-1"
)
set __ | findstr /I /L "[%__indexC%]"
ENDLOCAL
goto :eof
<强>输出强>:
==>D:\bat\StackOverflow\30435794.bat
__Device Name[0]=\Device\Harddisk0\Partition0
__Drive[0]=entire disk
__Index[0]=0
__Size[0]=55.899GB
__Type[0]=Harddisk
==>
资源(必读):
答案 1 :(得分:0)
@echo off
setlocal
set "Index="
for /F "tokens=2" %%a in ('findstr "Index: Drive:" hdd_list.txt') do (
if not defined Index (
set /A Index=%%a-1
) else (
if /I "%%a" equ "C:\" (
goto diskFound
) else (
set "Index="
)
)
)
:diskFound
echo The index for entire disk C:\ is: %Index%
答案 2 :(得分:0)
我会使用JREPL.BAT - 一个纯脚本(混合JScript /批处理)正则表达式文本处理实用程序,可以在XP以后的任何Windows机器上本机运行。
@echo off
for /f %%N in (
'jrepl "Index: (\d+)\r?\n.*\nDrive: C:\\" "$1-1" /jmatch /m /f hdd_list.txt'
) do set "index=%%N"
我使用/M
选项允许跨多行搜索,/JMATCH
选项仅返回匹配项,并将替换字符串指定为JScript表达式(从值中减去1)。
搜索会查找索引行,捕获数字,然后是任意行,后跟Drive: C\
行。