gpt4 book ai didi

c++ - 如何在 C++ Windows 中向/从批处理文件传递参数并获取返回的退出值

转载 作者:行者123 更新时间:2023-11-30 04:57:57 25 4
gpt4 key购买 nike

语境:

-Windows 10

-C++

-批处理文件

-我想在一个.cpp文件中调用一个.bat文件,并得到一个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)

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

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

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

最佳答案

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

If command is NULL and the command interpreter is found, returns a nonzero value. If the command interpreter is not found, returns 0 and sets errno to ENOENT. If command is not NULL, system returns the value that is returned by the command interpreter. It returns the value 0 only if the command interpreter returns the value 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%"'"
exit /b 123

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

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

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

关于c++ - 如何在 C++ Windows 中向/从批处理文件传递参数并获取返回的退出值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51862091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com