代码之家  ›  专栏  ›  技术社区  ›  LoukMouk

如何在C++窗口中传递参数并从批处理文件中获取返回值

  •  1
  • LoukMouk  · 技术社区  · 6 年前

    -窗口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%

    我应该用 exit 得到这个整数?

    奖金: 如果我想返回多个值呢?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Scheff's Cat    6 年前

    MSDN描述了 system() . 我引用了关于回报率的部分:

    如果 command NULL 找到命令解释器,返回非零值。如果找不到命令解释器,则返回 0 errno ENOENT 命令 不是 ,系统返回命令解释器返回的值。它返回值 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
    
        2
  •  0
  •   Michael Surette    6 年前

    g++和vs在实验中都有文件系统头,这可能是一个更好的解决方案。如果您喜欢环境变量解决方案,那么std::getenv将执行此操作。

    我已经很久没有做过任何批处理文件编程了,但我似乎记得可以在其中设置环境变量。