上下文:
-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
来获取这个整数吗?
奖金:如果我想返回多个值怎么办?
答案 0 :(得分:1)
MSDN描述了system()
的用法。我引用了有关返回值的部分:
如果
command
是NULL
并且找到了命令解释器,则返回非零值。如果找不到命令解释器,则返回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将做到这一点。
距离我完成任何批处理文件编程已经很长时间了,但是我似乎记得您可以在其中设置环境变量。