【问题标题】:Findstr with user input for batch fileFindstr 与批处理文件的用户输入
【发布时间】:2015-08-04 20:21:44
【问题描述】:

我想知道是否可以创建一个批处理文件来要求用户输入诸如“促销代码”之类的输入并搜索用户刚刚输入的“促销代码”。如果它们相等,那么我想打开一个文件,例如 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 个数字,如图所示。

【问题讨论】:

  • 您不能在 if 语句中使用 findstr。无论如何,我真的不明白问题是什么。 \path\ReadThisFileTest.txt 是否包含“促销代码”列表?如何根据代码知道启动哪个文件/程序?
  • 编辑帖子,以ReadThisFileTest.txt添加一行为例。
  • 是的,带有路径的文件包含“促销代码”列表。现在它会打开那个测试文档,如果它工作的话。我可以让它使用嵌套的 if 并根据促销代码打开不同的文件,但正如我所说,我不希望每次需要添加另一个促销代码时都必须继续编辑代码。所以我正在寻找的是一种读取包含促销代码的文件的方法,如果它等于用户输入的内容,则打开基于用户输入的促销代码的文件。
  • 在您的代码中,缺少 for 正文的右括号。此外,您需要在其后声明exit /B,否则即使未找到匹配项,也会始终在:MCD758 处继续执行。

标签: batch-file user-input findstr


【解决方案1】:

(已编辑以反映新信息)

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

@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.

【讨论】:

  • 因此,对于此方法,它会搜索文件以查找用户输入的内容,但您需要用户正确打开文件的路径?
  • @vince:是的,我的印象是每个促销代码都有一个不相关的文件名。如果文件名相关,即对于MCD758,您希望打开path\MCD758.docx,它会变得更容易。是这样吗?
  • 我相信是这样的。对于某个促销代码,它将具有需要打开的某个文件名。所以 MCD758 会打开说 path\MCD758.docx 和 MCD555 会打开 path\MCD555.docx
  • 已编辑,这应该可以解决您的问题。我在START 之后添加了CMD /C,因为这在某些机器上似乎是必需的(我现在坐的那个和我第一次回答时之前坐的那个)。
  • 非常感谢!过去几天我一直在做这件事,可能永远也想不通。
【解决方案2】:

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

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

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

批处理代码将如下所示:

@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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    相关资源
    最近更新 更多