想实现一个功能:通过批处理命令自动从git库中更新版本,进行Vc仿真编译,检查库中版本是否正常。没接触过批处理,目前在批处理.bat中写入git pull,但不能自动输入密码,自动化编译的第一步就中断了。哪位大神给个例子,可以在Windows的批处理命令中自动更新版本,以密码123为例,谢谢!

解决方案 »

  1.   

    仅供参考:#pragma comment(lib,"user32")
    #include <stdio.h>
    #include <string.h>
    #include <windows.h>
    int main() {
        SECURITY_ATTRIBUTES sa          = {0};
        STARTUPINFO         si          = {0};
        PROCESS_INFORMATION pi          = {0};
        HANDLE              hPipeOutputRead  = NULL;
        HANDLE              hPipeOutputWrite = NULL;
        HANDLE              hPipeInputRead   = NULL;
        HANDLE              hPipeInputWrite  = NULL;
        BOOL                bTest = 0;
        DWORD               dwNumberOfBytesRead = 0;
        DWORD               dwNumberOfBytesWrite = 0;
        CHAR                szMsg[100];
        CHAR                szBuffer[256];    sa.nLength = sizeof(sa);
        sa.bInheritHandle = TRUE;
        sa.lpSecurityDescriptor = NULL;    // Create pipe for standard output redirection.
        CreatePipe(&hPipeOutputRead,  // read handle
                &hPipeOutputWrite, // write handle
                &sa,      // security attributes
                0      // number of bytes reserved for pipe - 0 default
                );    // Create pipe for standard input redirection.
        CreatePipe(&hPipeInputRead,  // read handle
                &hPipeInputWrite, // write handle
                &sa,      // security attributes
                0      // number of bytes reserved for pipe - 0 default
                );    // Make child process use hPipeOutputWrite as standard out,
        // and make sure it does not show on screen.
        si.cb = sizeof(si);
        si.dwFlags     = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
        si.wShowWindow = SW_HIDE;
        si.hStdInput   = hPipeInputRead;
        si.hStdOutput  = hPipeOutputWrite;
        si.hStdError   = hPipeOutputWrite;    CreateProcess (
              NULL, "cmd.exe",
              NULL, NULL,
              TRUE, 0,
              NULL, NULL,
              &si, &pi);    // Now that handles have been inherited, close it to be safe.
        // You don't want to read or write to them accidentally.
        CloseHandle(hPipeOutputWrite);
        CloseHandle(hPipeInputRead);    // Now test to capture DOS application output by reading
        // hPipeOutputRead.  Could also write to DOS application
        // standard input by writing to hPipeInputWrite.
        sprintf(szMsg, "ver\n");
        WriteFile(
              hPipeInputWrite,      // handle of the write end of our pipe
              &szMsg,               // address of buffer that send data
              strlen(szMsg),        // number of bytes to write
              &dwNumberOfBytesWrite,// address of number of bytes read
              NULL                  // non-overlapped.
              );    while(TRUE)
        {
           bTest=ReadFile(
              hPipeOutputRead,      // handle of the read end of our pipe
              &szBuffer,            // address of buffer that receives data
              256,                  // number of bytes to read
              &dwNumberOfBytesRead, // address of number of bytes read
              NULL                  // non-overlapped.
              );      if (!bTest){
              sprintf(szMsg, "Error #%d reading pipe.",GetLastError());
              printf("%s",szMsg);
              break;
          }      // do something with data.
          szBuffer[dwNumberOfBytesRead] = 0;  // null terminate
          printf("%s",szBuffer);
          if ('>'==szBuffer[dwNumberOfBytesRead-1]) break;
        }    sprintf(szMsg, "chcp\nexit\n");
        WriteFile(
              hPipeInputWrite,      // handle of the write end of our pipe
              &szMsg,               // address of buffer that send data
              strlen(szMsg),        // number of bytes to write
              &dwNumberOfBytesWrite,// address of number of bytes read
              NULL                  // non-overlapped.
              );    while(TRUE)
        {
           bTest=ReadFile(
              hPipeOutputRead,      // handle of the read end of our pipe
              &szBuffer,            // address of buffer that receives data
              256,                  // number of bytes to read
              &dwNumberOfBytesRead, // address of number of bytes read
              NULL                  // non-overlapped.
              );      if (!bTest){
              sprintf(szMsg, "Error #%d reading pipe.",GetLastError());
              printf("%s",szMsg);
              break;
          }      // do something with data.
          szBuffer[dwNumberOfBytesRead] = 0;  // null terminate
          printf("%s",szBuffer);
        }    // Wait for CONSPAWN to finish.
        WaitForSingleObject (pi.hProcess, INFINITE);    // Close all remaining handles
        CloseHandle (pi.hProcess);
        CloseHandle (hPipeOutputRead);
        CloseHandle (hPipeInputWrite);    return 0;
    }
    //C:\test>test
    //Microsoft Windows [版本 5.2.3790]
    //(C) 版权所有 1985-2003 Microsoft Corp.
    //
    //C:\test>ver
    //
    //Microsoft Windows [版本 5.2.3790]
    //
    //C:\test>chcp
    //活动的代码页: 936
    //
    //C:\test>exit
    //Error #109 reading pipe.
    //C:\test>