批处理 - 从用户输入中获取多个参数

时间:2014-11-14 17:34:55

标签: windows batch-file

我有一个批处理文件,它从命令行调用批处理时从用户输入获取参数。我不是很擅长批量,所以为什么我在这里。我有多个文件,我希望用它来编译C ++代码,我需要的是一种获取多个参数的方法,而不指定有多少参数。

echo | set /p=g++ -c %1\%2.cpp > run.bat
pkg-config --cflags --libs gtkmm-3.0 >> run.bat
echo PAUSE >> run.bat
echo exit >> run.bat

start /wait run.bat
del run.bat

move %2.o %1\

示例运行:compile_sing helloworld main

这将编译.. \ helloworld \中的main.cpp并将生成的.o文件移动到.. \ helloworld \。

我还有另一个运行程序的批处理。

echo | set /p=g++ %1\%2.o %1\%3.o -o %1\%4 > run.bat
pkg-config --cflags --libs gtkmm-3.0 >> run.bat
echo PAUSE >> run.bat
echo exit >> run.bat

start /wait run.bat
del run.bat

start %1\%4

示例运行:run_mult helloworldv2 main file2 execute

这将创建可执行文件execute并运行它。

我想要的是一种输入多个文件名而无需放置%#的方法。文件数量范围为1-n。

对于第二个,我确定我需要一个特殊的字符放在最后一个参数前面,以指明它是结束的。

1 个答案:

答案 0 :(得分:0)

好的,在学习SHIFT之后,感谢JosefZ的提示,我得到了答案。

为了编译多个文件,我使用了以下

set folder_path=%1
SHIFT
:start
echo | set /p=g++ -c %folder_path%\%1.cpp > run.bat
pkg-config --cflags --libs gtkmm-3.0 >> run.bat
echo exit >> run.bat

start /wait run.bat
del run.bat
move %1.o %folder_path%
SHIFT
if not "%1"=="" (goto :start)

PAUSE

为了运行已编译的文件,我使用了以下

set folder_path=%1
set files=
set var=
SHIFT
:set_files
set files=%files% %folder_path%\%1.o
SHIFT
set var=%1
if not "%var:~0,1%"=="/" (goto :set_files)

echo | set /p=g++ %files% -o %folder_path%\%var:~1% > run.bat
pkg-config --cflags --libs gtkmm-3.0 >> run.bat
echo PAUSE >> run.bat
echo exit >> run.bat

start /wait run.bat
del run.bat

start %folder_path%\%var:~1%