如何在c ++窗口中的批处理文件中传递参数并获取返回的退出值

时间:2018-08-15 15:48:54

标签: c++ batch-file

上下文:

-Windows 10

-C ++

-批处理文件

-我想在.bat文件中调用.cpp文件并获得一个int作为返回值

-批处理文件计数并重命名作为参数传递的给定文件夹中的.jpg个文件

-批处理文件代码:

::%1 is the path to the base folder
::%2 is the name of the folder of the images
setlocal enabledelayedexpansion
@echo off

CD /D %1
set cnt=0
for %%f in (%2\*) do (
    set newName=000!cnt!
    set newName=!newname:~-4!
    ren %%f !newName!.jpg
    set /a cnt+=1
)

@echo %cnt% files renamed in order
exit /b %cnt%

问题:

我想我已经知道如何传递参数...您需要在调用的.bat文件后放置空格并输入所需的参数。

例如:

要在L:/baseFolder/water文件夹中运行脚本,我将使用:

system(file.bat L:\\baseFolder water)

如何获取cnt返回的exit /b %cnt%值作为cpp文件中的变量?

我应该使用exit来获取这个整数吗?

奖金:如果我想返回多个值怎么办?

2 个答案:

答案 0 :(得分:1)

MSDN描述了system()的用法。我引用了有关返回值的部分:

  

如果commandNULL并且找到了命令解释器,则返回非零值。如果找不到命令解释器,则返回0并将errno设置为ENOENT。如果command不是NULL,则系统返回命令解释器返回的值。仅当命令解释器返回值0时,它才返回值0

以某种方式,我假设批处理文件的返回码是命令解释器的返回码,但是我不确定,也没有找到合适的文档。关于这个。

因此,我制作了一个小样本并在本地进行了试用。

testExitBat.cc

#include <Windows.h>
#include <iostream>

int main()
{
  int ret = system("testExitBat.bat Hello");
  std::cout << "testExitBat.bat returned " << ret << '\n';
  return 0;
}

testExitBat.bat

::%1 an argument
echo "$1: '"%1%"'"

我在VS2013(Windows 10)上编译并运行了它:

C:\Users\Scheff>echo "$1: '"Hello"'"
"$1: '"Hello"'"

C:\Users\Scheff>exit /b 123
testExitBat.bat returned 123

答案 1 :(得分:0)

g ++和vs都处于实验状态,这可能是一个更好的解决方案。如果您更喜欢环境变量解决方案,那么std :: getenv将做到这一点。

距离我完成任何批处理文件编程已经很长时间了,但是我似乎记得您可以在其中设置环境变量。