IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème pour le lancement d'une commande DOS


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Par défaut Problème pour le lancement d'une commande DOS
    Bonjour, après avoir cherché partout des solutions qui ne fonctionnait pas je m'en remet à vous.
    Je souhaite lancer une application DOS (ex : toto.exe) avec des paramètres comprenant 2 chemins et un chaine de caractères.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    string cheminApp = "C:\\toto.exe";
    string commande = cheminSource + " " + cheminSortie + " test.txt");
    // en faisant ceci ça marche presque :
    Process.Start(cheminApp, commande);
    Le problème c'est que dans les "cheminSource" et "cheminSortie" il y a des espaces que je ne peut enlever et donc quand on lance le Process, je perds des parties de mon chemin :
    cheminSource = C:\Documents and Settings
    sera pris en compte : C:\Documents

    J'ai testé avec Path.GetFullPath(cheminSource); mais le problème est toujours le même
    // d'ailleurs qu'est-ce que ça fait si je met @cheminSOurce le "@" je l'ai vu de temps en temps...
    Sinon j'avais une idée qui serait de convertir mes chemins Windows en chemin DOS.
    Ex :
    Windows : C:\Documents and Settings
    DOS : C:\Docume~1
    Cela me permettrai certainement de résoudre mon problème mais pas moyen de trouver une méthode qui me fasse ça ! Je pourrais le coder moi même mais je sais pas comment est fais l'algo pour couper ces chemins et pour qu'il soit compris par MSDOS...

    Merci pour vos réponses

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    En général, lorsqu'un paramètre contient des espaces il faut le mettre entre guillemets pour que l'interpréteur de commande considère la totalité de la chaîne comme un seul paramètre :

    C:\\Toto.exe "Mon Paramètre 1" "Mon Paramètre 2" Paramètre3

    Concernant le @ en C# placé devant une chaîne, il permet d'écrire \ au lieu de \\.

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 249
    Par défaut
    comme le dit kaidan, lorsque un chemin contient des espaces, il faut l'encadrer de " pour qu'il soit compris dans sa totalité par le système. Ca vaut aussi pour l'executable qui doit être lancé.


    Pour ce qui est de l'algo de création des nom courts, il est très simple. On prend les 6 premiers caractères du nom et on rajoute ~1. Si un fichier ou de dossier existe déjà avec ce nom là dans le dossier, on met ~2 à la place de ~1, ou ~3 ou ~4, .... jusqu'à trouver un nom qui n'est pas déjà pris.
    Ceci est au moment de la création du nom court.
    Ensuite au moment de l'utilisation, il n'y a aucun moyen de déterminer, à ma connaissance, le nom court qui a été utilisé (sauf à utiliser une API de Windows qui donne le nom court à partir du nom long, mais là on tourne en rond)

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Par défaut
    Ok j'avais oublié de dire que j'avais aussi essayé avec les " (double quote) et que ça me sortait un résultat complétement bizarre et ça marchait pas.
    Supposons :
    cheminSource = "C:\Documents and Settings\toto"
    cheminSortie = "C:\Documents and Settings\bozo"

    si je fais comme vous dites :
    commande = "\"" + cheminSource + "\" \"" + cheminSortie + "\" test.txt"

    les 2 arguments (le 3ème n'est pas visible dans la fenêtre DOS) pris en compte seront :
    cheminSource :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Documents and Settings\toto" C:\Documents
    // bizarre le " en plein milieu
    cheminSortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Documents and Settings\Administrateur\Mes documents\Visual Studio 2008\Projects\MonProjet\MonProjet\bin\Debug\and
    Alors peut être ai je fais une erreur dans la gestion des ", mais je vois pas où.

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 249
    Par défaut
    Test effectué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                string cheminApp = "C:\\temp\\test.bat";
                string cheminSource = "C:\\Documents and Settings\\toto";
                string cheminSortie = "C:\\Documents and Settings\\bozo";
                string commande = "\"" + cheminSource + "\" \"" + cheminSortie + "\" test.txt";
     
                Process.Start(cheminApp, commande);
    Résultat obtenu (fichier test.txt) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "C:\Documents and Settings\toto" 
    "C:\Documents and Settings\bozo" 
    test.txt
    avec le fichier test.bat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo %1 >>%3
    echo %2 >>%3
    echo %3 >>%3
    pause

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 194
    Par défaut
    Merci mais c'est pas ça. J'explique un peu l'application DOS :
    J'ai un fichier "hobo.exe" que j'ai récupérer sur le net.
    Ce fichier me permet de copier un ou plusieurs fichier(s) ("test.txt" est un exemple) d'un répertoire source (cheminSource) vers un répertoire de sortie (cheminSortie).

    pour le lancer, il faut faire de cette façon quand on utilise un fichier .bat :
    dans le fichier Copie.bat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hobo.exe cheminSource cheminSortie typeDeFichier
    ex : typeDeFichier = *.tch // ce qui veut dire de me copier tout les fichiers dont l'extension est tch

    moi ce que je veut c'est lancer ce fichier "hobo.exe" avec les paramètres "cheminSource cheminSortie typeDeFichier".
    De plus les chemins ne sont pas codés en dur mais détectés au démarrage de mon projet (cheminSource) et aussi via saisie de l'utilisateur (cheminSortie).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Généralités] Jauge de progression au lancement d'une commande dos
    Par Jeje9 dans le forum WinDev
    Réponses: 5
    Dernier message: 22/06/2012, 15h25
  2. Problème pour lancer une commande DOS
    Par groslou2 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 16/03/2011, 15h38
  3. Impersonification pour le lancement d'une commande
    Par yridwenn dans le forum Windows Forms
    Réponses: 0
    Dernier message: 06/07/2009, 15h06
  4. [MS-DOS] Une commande DOS pour activer les mises à jour auto
    Par Furius dans le forum Scripts/Batch
    Réponses: 20
    Dernier message: 02/12/2005, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo