Exécuter une commande dos sans quitter son application sous windows

Description

Copie un fichier en passant par la commande Copy du DOS, en utilisant un fichier batch.
Utile éventuellement (à tester) si ce fichier est verrouillé sous Windows (s'il est utilisé par une autre appli, par exemple).

Ce code vient en réponse (?) à un problème évoqué sur le forum.

Mais ça ouvre pas mal d'autres possibilités, à vous de juger...

Pour faire un fichier batch, c'est très simple:
- ouvrir Notepad,
- écrire les commandes (toutes les commandes DOS sont acceptées),
- l'enregistrer avec l'extension ".bat".

Pour la syntaxe, se référer à son vieux manuel de DOS.

L'idée m'était venue pour concevoir une interface qui lance un "vieux" jeu tournant sous Dos, en l'occurence "Duke Nukem 3D". Ce programme lance également les niveaux conçus avec l'éditeur de niveaux fourni avec ce jeu.
Clin d'oeil complice à ceux qui auraient passé des nuits blanches à pratiquer "build", se heurtant à l'incompréhension totale de leur entourage...
Si mon "DukeMap Launcher" intéresse quelqu'un, je balancerai le source.

Pour en revenir au fichier batch utilisé ici, la syntaxe est des plus simples :

@ECHO OFF
CLS
REM (%1: origine, %2: destination)
COPY /y %1 %2
REM (EXIT permet de sortir du DOS)
EXIT

COPY est suivi de l'option "/y" indispensable puisqu'elle évite la demande de confirmation de copie par Dos, ensuite l'argument "%1" est le chemin et le nom du fichier à copier, l'argument "%" le chemin et le nom du fichier qui sera copié.

Les noms longs sont acceptés, à ma grande surprise (Destination.txt)...

La démonstration dans le zip est minimale, elle se contente de copier le fichier "Origine.txt" dans le même répertoire sous le nom de "Destination.txt". A vous de développer , je n'ai pas le temps pour l'instant ;)

AUTRE POSSIBILITÉ (ajout du 12-06-04)

Si vous ne désirez pas profiter des joies de la programmation batch sous DOS, il existe une autre manière de procéder beaucoup plus simple à mettre en oeuvre, utilisant cette fois WinExec.

Voir le code rajouté ci-dessous.

P-S: ATTENTION AUX ESPACES, ils ont leur importance dans les commandes DOS.
Le risque étant que ça ne fonctionne pas...

Source / Exemple :


uses ShellApi;

procedure CopyFileDos(Source, Destination: String);
begin
  ShellExecute(
    Application.Handle,
    'Open',
    PChar(CheminAppli + '\COPYDOS.BAT'),  // lancement de COPYDOS.BAT
    PChar(Source + ' ' + Destination),    // 2 paramètres séparés par un espace
    '',
    SW_HIDE
    );
end;

Voir le zip !

AUTRE POSSIBILITÉ (plus simple à mettre en oeuvre...)

procedure CopyFileDos(Source, Destination: String);
begin
  WinExec(
    PChar('COMMAND.COM /K COPY /y ' + Source + ' ' + Destination),
    SW_HIDE
    );
end;

Conclusion :


Bonne prog' !

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.