Programowanie w języku Pascal » FAQ

Jak skorzystać z funkcji DOSa (dir, cd, copy itp.)

  • 8 komentarzy
  • 627 odsłon
  • Oceń ten tekst jako pierwszy
Pewnie zauważyłeś już istnienie procedury exec, i zastanawiasz się, czemu nie działa gdy chcesz zarzucić DOSowym poleceniem. Rozwiązanie jest banalnie proste: podajesz procedurze złe parametry. Otóż to, co chcesz wykonać, np.: dir, to nazwa polecenia, a nie programu. Programem jest interpreter poleceń, tzn. plik command.com, a polecenie to jego parametr.
W praktyce działa to tak: exec('c:\command.com','/c '+nazwa_Twojego_polecenia); proste?

8 komentarzy

Maestro69pw 2013-10-08 23:09

command.com jest spuścizną po MS-DOS, aktualnie system z rodzin NT w wersji 64-bitowej nie posiadają tego programu, zastąpiony całkowicie został przez CMD.exe

xc 2006-09-01 16:10

jak zrobić żeby wy świetlić : set?? exec('c:\command.com','/c '+set); set jest funkcją w pascalu.. :( jak zrobić żeby to sie wyświetliło!!

Rookie One 2004-11-12 15:56

Artur po kiego taka skomplikowana procedurka jak mozna uzyc Copyfile... :/

fatalbomb 2004-05-27 16:39

Jako pierwszy parametr można podać taki ciąg: GetEnv ('COMSPEC') spowoduje to, że command załaduje się z innego miejsca (np z C:\WINDOWS\COMMAND.COM)

Mati_mm 2004-01-24 21:32

dobra, spoko, a teraz:
Jak przepisać cos z jakiegos pliku do srugiego tylko, ze w odwrotnej kolejności, czyli w jednym jest "Kowalski" i zeby w 2. było "ikslawoK"?

Mentor 2003-08-14 09:33

Jeżeli chodzi o DIR to :

PROCEDURE wypisz(dir:STRING); //dir czyli sciezka do katalogu musi byc bez koncowej kreski np C:
var plik : searchrec;

begin

Findfirst(dir+'\*.*',$01+$02+$04+$20,plik); //szukamy najpierw plików, można oczywiście kolejność zamienić

WHILE doserror=0 DO BEGIN  // dopuki nie ma błędu szukamy i wypisujemy
Writeln(plik.name);
FindNext(plik);
END;

Findfirst(dir+'\*',$10+$02,plik);  //teraz katalogi

WHILE doserror=0 DO BEGIN          
Writeln('['+plik.name+']');
FindNext(plik);
END;

end;

Artur 2003-02-06 13:22

Pogrzeb też w pomocy, tam jest mnóstwo ciekwych poleceń z przykładami. A jeśli chodzi o kopiowanie plików to można to zrobić jeszcze inaczej mianowicie
var k:byte
...
assign(g,'plik1.txt');  {kojarzymy pliki}
assign(f,'plik2.txt');
reset(g);                  {otwieramy jeden}
rewrite(f);                 {tworzymy drugi}
while not eof(g) do  
begin            {dopóki plik1.txt się nie skończy}
   readln(g,k); {czytaj z niego}
   writeln(f,k);  {i zapisuj do 'plik2.txt'}
end;
close(f);
close(g);
 
Oczywiście można tak skopiować inne rodzaje plików nie tylko *.txt  

Niereb 2002-12-30 12:56

A ktos tego nie wiedzial? Wstyd.