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

ŁF

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?

FAQ

8 komentarzy

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

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!!

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

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)

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"?

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;

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

A ktos tego nie wiedzial? Wstyd.