问题描述
这次我尽量说清楚!
我正在编写一个 .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)。
-
首先我想重定向
echo %1 | findstr "^-" > %avariable%
然后if "%avariable%"==""
然后没有指定字符“-”,因此去检查文件扩展名"%~x1"
(没有工作)。 -
其次,我想将 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 (将#修改为@)