Getting Dos Result

Greeting...
How can I make command in dos & get the result in textfile ?
and what if i have many commands ?

example :
C:\cd New Folder
C:\New Folder\Dir

thank you.
LVL 2
TheLeaderAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Eddie ShipmanAll-around developerCommented:
Look at my previous answer to this, almost, same question:

http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_20756036.html
0
TheLeaderAuthor Commented:
well i just saw this question, but its kind of, but not the same.
I want to run many commands in dos, and get the result in text file.
and one more thing i want to control the working directory, not as that example.

0
GloomyFriarCommented:
C:\New Folder\Dir >text_file.txt
0
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

Eddie ShipmanAll-around developerCommented:
Then create a batch file and run it with the > You can run the batch file just by using ShellExecute.
I have a memo on my form and I type in:
  cd\eddie
  dir >>result.txt
  cd \mrbaseba;;\mrbaseball
  dir >> result.txt
  cd\
  dir >> result.txt
 
  Then in a buttonclick I have this:
  Memo1.Lines.SaveToFile('c:\blah.bat');
  // Change sw_show to sw_hide if you don't want the window to show.
  ShellExecute(Handle, 'open', 'c:\blah.bat', '', 'c:\', SW_SHOW);

Runs perfectly and creates the file with the results of the dir command.
0
Eddie ShipmanAll-around developerCommented:
oops, typo...

cd \mrbaseball\mrbaseball
NOT
cd \mrbaseba;;\mrbaseball

0
TheLeaderAuthor Commented:
ok, After I run the Batch with shellexecute wheres the Result ?
as i can see, the command only in memo not the result of command.
From your example, lets say I want the result in the memo, how ?
0
GloomyFriarCommented:
To get the results you need to use CreateProcess and you need to redirect stdout and stderr streams of the created process.
0
GloomyFriarCommented:
Or just read the files std_out and str_err, if you run command like the following:

dir >std_out  2>str_err
0
Eddie ShipmanAll-around developerCommented:
Then load the result.txt file into the memo using:
  Memo1.Lines.LoadFromFile('c:\result.txt');

0
TheLeaderAuthor Commented:
ok i got the idia.
but can anyone show with code please ?
thank you
0
Eddie ShipmanAll-around developerCommented:
Damn, man, I showed you the code above, do you want me to hold your hand, too?
Next time, you can pay for us to write your application for you.

Actually, you will need to wait until the ShellExecute is finished.

function WinExecAndWait32(FileName: string; Visibility: integer): Cardinal;
 { returns 9999 if the Exec failed, otherwise returns the process' exit
   code when the process terminates }
var
  zAppName: array[0..512] of char;
  zCurDir: array[0..255] of char;
  WorkDir: string;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  StrPCopy(zAppName, FileName);
  GetDir(0, WorkDir);
  StrPCopy(zCurDir, WorkDir);
  FillChar(StartupInfo, Sizeof(StartupInfo), #0);
  StartupInfo.cb := Sizeof(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := Visibility;
  if not CreateProcess(nil,
    zAppName, { pointer to command line string }
    nil, { pointer to process security attributes }
    nil, { pointer to thread security attributes }
    False, { handle inheritance flag }
    CREATE_NEW_CONSOLE or { creation flags }
    NORMAL_PRIORITY_CLASS,
    nil, { pointer to new environment block }
    nil, { pointer to current directory name }
    StartupInfo, { pointer to STARTUPINFO }
    ProcessInfo) then { pointer to PROCESS_INF }
    Result := 9999
  else
  begin
    WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess, Result);
    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(ProcessInfo.hThread);
  end;
end;

procedure TForm1.Button1click(Sender:TObject);
begin
  Memo1.Lines.SaveToFile('c:\blah.bat');
  // Change sw_show to sw_hide if you don't want the window to show.
  WinExecAndWait32('c:\blah.bat', SW_HIDE);
  Memo1.Lines.LoadFromFile('c:\result.txt');
end;
0
TheLeaderAuthor Commented:
"EddieShipman" I Appreciate your work, but in the first place, I ask this question because I don't know how !
you have some skill -> (keep it, or share it)
be nice, no hard feelings.
anyway I'll try your code, thank you.
0
ProgramMakerCommented:
I agree with you TheLeader
EddieShipman be mr.nice guy
0
TheLeaderAuthor Commented:
"EddieShipman", well i think you miss something...
i know this function is the same function in the link, I test it before there was no problem, BUT you keep saying "result.txt", How can I get the result in result.txt if theres no file called result.txt, ok I created it, but it still empty.
So, How can I take the result from your function into the memo ?
0
Eddie ShipmanAll-around developerCommented:
Did you create the blah.bat file with the commands that you want to run?
If you don't, you won't get the result.txt file.

blah.bat:
  cd\eddie
  dir >result.txt
  cd \mrbaseball\mrbaseball
  dir >> result.txt
  cd\
  dir >> result.txt

This worked flawlessly for me. REMEMBER TO USE >> insted of >
in the second and third times writing to the file because otherwise
it will overwrite the results each time you are outputting to the file.

I have given you enough information to accomplish your goal, here.
Read each post and put the steps together and it will help.


0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
TheLeaderAuthor Commented:
the problem was ">" after the command.
thank you EddieShipman.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Delphi

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.