批次问题:如何循环遍历所有 FindStr 结果并将其显示为菜单?

Batch Q: How can I loop through all FindStr results and present it as a menu?

感谢您的宝贵时间!这对您来说可能不是挑战。

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

这是我目前的情况:

@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

如有任何帮助,我们将不胜感激!谢谢!

@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 的文件,其中包含一些文件名数据用于我的测试。 (如果能提供样品就更好了)

首先,select 名称根据 input,但带有 /b 开关(在行首匹配) /L 用于文字匹配 /i 不区分大小写(以防您也需要字母匹配)和 /n 在行首提供 a unique number: 。首先清除所有 $ 变量后,将 $uniquenumber 设置为找到的文件名。

通过 运行 将 set $ 的所有值通过 findstr /n /r 显示菜单。谎言将采用 3: =filename3 形式,因此在 := 上划定界限并显示第一个和第三个标记。 UUse selection 作为标志(如果设置,找到 1 个或多个文件 - 如果需要,可以使用 if selection is 1 到 auto-运行 的事实)

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

请注意,如果您输入“12”作为 input,那么将显示所有以 12 开头的文件。如果要匹配 .,则在第一个 findstr 中将 . 附加到 %input%