检查 FOR /f 循环批处理中变量的等效性

问题描述

这次我尽量说清楚!

我正在编写一个 .bat 文件来编译不同支持语言(fortran、C、C++ 等)的单个(目前)文件。由于目前它是针对单个文件的,因此我采用了这种架构:

buildfile [-lang] filename

如果指定 -lang 可以是 -cpp、-c、-for 等。如果未指定,-lang 将根据文件扩展名假设。

现在,我报告第一段代码(很开始,所以之前什么都没有):

@echo off


:: check first input
if "%1"=="" goto :Syntax
if "%1"=="-h" goto :Syntax
if "%1"=="/h" goto :Syntax
if "%1"=="/?" goto :Syntax
if "%1"=="--help" goto :Syntax
if "%1"=="/help" goto :Syntax

echo %1 | findstr "^-" > inp.log
echo Not found >> inp.log
set "var="
for /f "tokens=* delims=" %%i in (inp.log) do (
    echo Big I writes %%i
    set "var=%%i"
    set var
    if "%var%"=="Not found" (
        echo String not found
        goto :end
        if "%~x1"=="" goto :Syntax
    )
    goto :end
)

在检查用户是否寻求帮助后,我想检查字符“-”是否存在(这意味着是否指定了 -lang)。

  1. 首先我想重定向 echo %1 | findstr "^-" > %avariable% 然后 if "%avariable%"=="" 然后没有指定字符“-”,因此去检查文件扩展名 "%~x1" (没有工作)。

  2. 其次,我想将 findstr 命令直接作为 FOR /F 循环的参数放置在回显 %1 中,但是如果“-”不存在,则由于搜索字符串为空而爆炸! (即 for /f "tokens=* delims=" %%i in (' echo %1 ^| findstr "^-" ') do (

所以,最后是您在代码段中看到的内容,将输出写入文件并重新读取它,但是有些地方无法正常工作。 我添加了“未找到”行以避免读取空文件(因为显然给出了与选项 2 相同的错误)。 我看到当我设置 var 时,我正确地看到了“var=Not found”,这意味着 var 设置正确。 但是一旦我到达 FOR /F 循环中的 IF 条件,那就行不通了。

我可以想象有一个更好、更干净的解决方案,所以我在这里寻求您的帮助。 我会说与选项 1 不远的相同内容可能是最好的,因为您只执行 2 个操作(重定向,然后是 IF 条件),也许我缺少一些使其工作的语法。

非常感谢!

编辑: 当然,如果找到“-”字符,那么我会做一个简单的拼写检查来假设语言(通过许多 IF 语句)

PS:所有转到都在那里作为调试。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)