批处理问:如何循环浏览所有FindStr结果并将其作为菜单显示?

时间:2015-02-18 02:20:30

标签: batch-file for-loop findstr

谢谢你的时间!这对您来说可能不是一个挑战。

所以我有一个列表是一个txt文件,格式为######。NAME-DATE对应于文件。 ##是唯一的识别号码,日期代表相同号码的不同文件。我想要一个批处理文件询问该号码并查找与该号码对应的所有文件并将其作为菜单显示,以便用户可以选择她/她想要打开的那个。

这是我到目前为止所做的:

@echo off   
set /p Input=Enter MRN:

set var=
setlocal enabledelayedexpansion
for /f "tokens=* delims=:" %%a in ('findstr "%Input%" log.txt') do (
    set var=!var!%%a"|"
    SET /A COUNT += 1
)    
set var=!var!
endlocal

PAUSE

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL
:: remove variables starting $
FOR  /F "delims==" %%a In ('set $ 2^>Nul') DO SET "%%a="

set /p Input=Enter MRN:

for /f "tokens=1*delims=:" %%a in ('findstr /i /b /n /L "%Input%" q28574900.txt') do (
 set "$%%a=%%b"
)
SET "selection="
for /f "tokens=1,2*delims==:" %%a in ('set $ 2^>nul^|findstr /n /r "^"') do (
 ECHO %%a : %%c
 SET /a selection=%%a
)
IF NOT DEFINED selection ECHO no matches&GOTO :eof
SET "selection="
SET /p "selection=Select which ? "
for /f "tokens=1,2*delims==:" %%a in ('set $ 2^>nul^|findstr /n /r "^"') do (
 IF "%selection%"=="%%a" SET "selection=%%c"&GOTO run
)
ECHO invalid selection
GOTO :eof

:run
ECHO run whatever using %selection%


GOTO :EOF

我使用了一个名为q28574900.txt的文件,其中包含一些用于测试的文件名数据。 (如果你提供样品,那就更好了)

首先,根据input选择名称,但使用/b开关(以匹配行首)/L进行文字匹配/i不区分大小写(如果您也想要进行字母匹配),/n在行的开头提供a unique number:。首先清除所有$个变量,将$uniquenumber设置为找到的文件名。

通过set $运行findstr /n /r的所有值来显示菜单。谎言的格式为3: $3=filename3,因此在:=上划分并显示第一个和第三个令牌。 UUse selection作为标记(如果已设置,找到1个或多个文件 - 可以使用如果selection最后为1则自动运行的事实)

然后要求选择并使用与显示菜单相同的方法匹配对列表所做的选择。如果您找到所做的选择,请在selection中设置文件名并运行所需的程序,如果没有,请报告问题并完成。

请注意,如果您输入" 12"如input,则会显示所有以12开头的文件。如果您想匹配包括 ,请将.添加到第一个%input%中的findstr