Findstr 与批处理文件的用户输入

Findstr with user input for batch file

我想知道是否可以创建一个批处理文件,要求用户输入 "promocode" 并搜索用户刚刚输入的 "promocode"。如果它们相等,那么我想打开一个文件,例如 word 文件,excel 或 sql。我希望能够做到这一点,因为对于每个不同的代码,都需要为同事打开一个不同的文件。如果我有一个可以搜索的文件以查看促销代码是否存在,那么我将不需要继续为新的促销代码添加代码,他们只需将促销代码添加到文本文件即可。
如果无法完成此代码,请告诉我。

@echo off
SET /P promocode="Type a promocode please:"
for %%d in (\path\ReadThisFileTest.txt) do (
if findstr "MCD758" == %promocode% goto :MCD758

:MCD758
start \path\test.docx

我已经尝试了很多事情,这里是一个例子。我不知道你是否可以这样做,或者它的顺序是否正确。

编辑 ReadThisFileTest.txt 中的是促销代码: MCD758 MCD555 MCD957。不止这三个,但它们在文本文件中各占一行。而且每个都有 3 个字母后跟 3 个数字,如图所示。

(已编辑以反映新信息)

如果促销代码与您要打开的文件名的前缀相同,您可以这样做:

@ECHO OFF
SET /P promocode="Type a promocode please: "
FOR /F "usebackq tokens=*" %%G IN ( "\path\ReadThisFileTest.txt" ) DO (
    IF "%promocode%" == "%%G" (
        START CMD /C "path\%%G.docx"
        EXIT
    )
)
ECHO No matching code found.

更灵活的方法是扩展促销代码文件 \path\ReadThisFileTest.txt 以包含两列(以空格分隔),如下所示:

MCD758  \path\test.docx
MCD759  \path\to\another\file.xlsx

因此文件名不再与促销代码绑定,您甚至可以提供不同的路径 and/or 文件扩展名。

批处理代码如下所示:

@echo off
set /P promocode="Type a promocode please: "
for /F "usebackq tokens=1,*" %%F in ("\path\ReadThisFileTest.txt") do (
    if "%promocode%"=="%%F" (
        start %%~G
        exit /B
    )
)
echo The promocode you entered is not valid.

如果您希望以不区分大小写的方式检查促销代码,您需要将 if "%promocode%"=="%%F" 替换为 if /I "%promocode%"=="%%F"