从早上找到下午,看了无数个博客、stackoverflow……
就没找到一个符合的例子
需求是:本来是在powerShell中手工调用几个第三方程序提供的命令,分别对一个文件夹最后那个所有图片进行色彩调整、裁剪、最后合并
每个命令,都耗时很长,并且处理完每个文件,它都会输出处理结果,比如:pic0失败,格式不符合要求。pic1成功,pic2成功
现在我想用C#程序,去调用powershell执行。需要依次执行三个命令,每个命令执行过程中,要实时返回几千张图片,每个的成功与否,而不是最后一下次返回,就像真的在powershell中执行那样。然后我拿到所有的结果后,自己写逻辑分析,对失败的,执行第2个命令(必然成功),也是实时返回所有结果。最后前两个执行完,自动执行第3个(所有的必然成功)
——————————————————————————————————————————
请不要没亲自试过的,随便搜一下粘贴,我可以负责任的说,下面等等一堆,都不对
https://stackoverflow.com/questions/39505633/c-sharp-get-real-time-powershell-script-output
……
仅供参考:(尽管是C)
#include <windows.h>
#include <stdio.h>
#include <string.h>
char YN(int k) {
FILE *f;
char fn[40];
char ln[80];
char yn;
int n;
yn='N';
sprintf(fn,"d:\\ping%d.txt",k);
f=fopen(fn,"r");
if (NULL!=f) {
n=0;
while (1) {
if (NULL==fgets(ln,80,f)) break;//
if (strstr(ln,"ms ")) {
yn='Y';
break;//
}
n++;
if (n>=4) break;//
}
fclose(f);
}
return yn;
}
void main(int argc,char **argv) {
char cmdstr[256];
int i;
int IP[3];
char c;
if (argc<2) {
USAGE:
printf("Usage example:\n %s 192.168.60.\nto test 192.168.60.1-254\n",argv[0]);
return;
}
if (4==sscanf(argv[1],"%d.%d.%d%c",&IP[0],&IP[1],&IP[2],&c)) {
if (0<=IP[0] && IP[0]<=255
&& 0<=IP[1] && IP[1]<=255
&& 0<=IP[2] && IP[2]<=255
&& '.'==c) {
for (i=1;i<255;i++) {
sprintf(cmdstr,"cmd /c ping %s%d -n 1 -w 1000 >d:\\ping%d.txt",argv[1],i,i);
WinExec(cmdstr,SW_HIDE);
}
Sleep(3000);
for (i=1;i<255;i++) {
printf("%c %s%d\n",YN(i),argv[1],i);
}
Sleep(3000);
WinExec("cmd /c del /q d:\\ping*.txt",SW_HIDE);
} else goto USAGE;
} else goto USAGE;
}