谢谢你的时间!这对您来说可能不是一个挑战。
所以我有一个列表是一个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
任何帮助将不胜感激!谢谢!
答案 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
。