| Bug EXECUTE/EXECUTE_WAIT | |
|
|
Auteur | Message |
---|
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Bug EXECUTE/EXECUTE_WAIT Mar 9 Fév 2016 - 21:36 | |
| Bonjour à tous Bien qu'il n'y ait pas d'erreur dans le chemin, les espaces dans les noms absolus de fichier à exécuter provoque l'affichage de ce message "windows ne trouve pas..." puis l'erreur(97): - Code:
-
execute_wait "C:\Program Files\Panoramic Editor\PANORAMIC0927i5.exe " :' ---> erreur!
execute_wait "PANORAMIC0927i5.exe " :' ---> ok
execute C:\Program Files\Panoramic Editor\PANORAMIC0927i5.exe " :' ---> pas d'erreur signalé, mais la commande n'est pas éxécuté
execute "PANORAMIC0927i5.exe " :' ---> ok
| |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Bug EXECUTE/EXECUTE_WAIT Mar 9 Fév 2016 - 22:24 | |
| Il est connu que la commande execute_wait n’aime pas les espaces dans les noms des fichiers. Il faut donc remplacer ces espaces par un autre caractère (par exemple le caractère underscore _) J’ai posté un code pour faire cela, c’est à cet endroitVoici le code en question - Code:
-
rem ============================================================================ rem Renommer tous les fichiers d un dossier dont les noms comportent des espaces rem en les remplaçant par le caractère de soulignement _ (underscore) rem Par exemple : rem Le fichier : "Mon fichier test.bas" rem sera renommé : "Mon_fichier_test.bas" rem ============================================================================ ' Pour tester : ' créer un dossier de travail sur le bureau : "Mon Dossier" par exemple ' y copier quelques fichiers (pour servir de test) dont les noms comportent des espaces ' Par exemple : ' "Mon fichier avec espace.txt" ' "Mon second fichier 1 2 3 .bas" ' Appeler la sub : Renomme_Fichiers("C:\Users\acer\Desktop\Mon Dossier") ' Vos fichiers devront être renommés en : ' "Mon_fichier_avec_espace.txt" ' "Mon_second_fichier_1_2_3.bas rem ============================================================================ rem NB : Ce script renomme seulement les fichiers, pas les dossiers ! rem ============================================================================
Renomme_Fichiers("C:\Users\acer\Desktop\Nouveau dossier") : ' Adapter le chemin
end rem ============================================================================ ' Script pour remplacer les espaces dans les noms des fichiers par le caractère ' de soulignement _ (underscore) SUB Renomme_Fichiers(dossier$) dim_local src$,q$ if dir_exists("C:\temp") = 0 then dir_make "C:\temp" if dir_exists(dossier$) = 0 message "Le dossier : " + dossier$ + " n'existe pas !" + chr$(13) + "Veuillez vérifier son chemin" exit_sub end_if src$ = "C:\temp\rename.bat" : q$ = chr$(34) FILE_OPEN_WRITE 9999,src$ FILE_WRITELN 9999,"@echo off" FILE_WRITELN 9999,"setlocal enabledelayedexpansion" FILE_WRITELN 9999,"for /r " +q$ + dossier$ + q$ + " %%a in (*.*) do (" FILE_WRITELN 9999,"set "+q$+"path=%%~nxa"+q$ FILE_WRITELN 9999,"set "+q$+"path=!path: =_!"+q$ FILE_WRITELN 9999,"move /y "+q$+"%%~a"+q$+" "+q$+"%%~dpa!path!"+q$ FILE_WRITELN 9999,")" FILE_CLOSE 9999 EXECUTE_WAIT src$ FILE_DELETE src$ END_SUB rem ============================================================================
| |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Bug EXECUTE/EXECUTE_WAIT Mar 9 Fév 2016 - 22:36 | |
| Il est exact qu'il ne faut pas d'espaces dans les noms de fichier, EXECUTE considère qu'un espace est un séparateur d'arguments. On peut encadrer le nom du fichier par des quotes = CHR$(34), mais ça ne marche pas toujours. @papydall, certes mon ami on peut changer le nom des fichiers, mais ce n'est pas toujours possible ni souhaitable ! Le mieux à mon sens est de convertir le nom du fichier en nom court (format 8.1), et seulement pour le donner comme argument à la commande. Par exemple: - Code:
-
SUB FileShort(f$) ' Conversion du chemin du fichier f$ en nom court sans espaces, résultat dans le clipboard EXECUTE_WAIT "cmd /c for %A in ("+CHR$(34)+f$+CHR$(34)+") do @echo %~sA | clip" CLIPBOARD_STRING_COPY LEFT$(CLIPBOARD_STRING_PASTE$, LEN(CLIPBOARD_STRING_PASTE$)-3) END_SUB | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Bug EXECUTE/EXECUTE_WAIT Mar 9 Fév 2016 - 22:45 | |
| C’est à ces petits détails qu’on reconnait le pro (comme JL35) de l’amateur (comme Papydall) | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Bug EXECUTE/EXECUTE_WAIT Mar 9 Fév 2016 - 23:37 | |
| Oui papydall, mais parfois s'il n'est pas sûr de lui le pro s'tâte (à mon âge...) | |
|
| |
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Bug EXECUTE/EXECUTE_WAIT Mar 9 Fév 2016 - 23:49 | |
| Merci pour vos solutions! @JL35 ta sub ne fonctionne pas chez moi, je suis sous XP et 'CLIP' n'est pas reconnu J'ai réussi à me dépanner en copiant directement l'éxécutable concerné dans le repertoire de mon projet, mais ça reste quand même un bug, c'est pour ça que je l'ai signalé. | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Bug EXECUTE/EXECUTE_WAIT Mer 10 Fév 2016 - 0:06 | |
| Effectivement, le clip n'est pas encore en standard dans XP. Autre solution: - Code:
-
SUB Nomcourt(Path$) ' Conversion de Path long en Path court (sans espace) -> clipboard DIM_LOCAL nc_fbat$,nc_tmp$,nc_court$,q$,c$ q$ = CHR$(34) nc_fbat$ = "C:\TEMP\Nomcourt.bat": nc_tmp$ = "C:\TEMP\temp.tmp" FILE_OPEN_WRITE 9, nc_fbat$ FILE_WRITELN 9, "@echo off" FILE_WRITELN 9, "for %%A in ("+q$+Path$+q$+") do echo.%%~sfA >"+nc_tmp$ FILE_CLOSE 9 EXECUTE_WAIT nc_fbat$ FILE_OPEN_READ 9, nc_tmp$ FILE_READLN 9, c$ FILE_CLOSE 9: FILE_DELETE nc_tmp$: FILE_DELETE nc_fbat$ CLIPBOARD_STRING_COPY c$ END_SUB | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Bug EXECUTE/EXECUTE_WAIT Mer 10 Fév 2016 - 0:10 | |
| - Silverman a écrit:
- ta sub ne fonctionne pas chez moi, je suis sous XP et 'CLIP' n'est pas reconnu
CLIP.EXE est une commande fort utile qui sert à rediriger la sortie d’une commande de l’invite de commande vers le clipboard. Elle existe depuis Windows vista (pas sur XP). Je te recommande de la télécharger à partir de mon Webdav : fichier clip.exe et l’enregistrer dans le dossier C:\WINDOWS\system32.
Les paramètres d'accès à mon webdan sont dans ma signature. | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Bug EXECUTE/EXECUTE_WAIT Mer 10 Fév 2016 - 0:16 | |
| C'est vrai que c'est rudement utile, je m'en sers tout le temps, c'est bien plus pratique (et rationnel) que de créer des fichiers temporaires. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Bug EXECUTE/EXECUTE_WAIT Mer 10 Fév 2016 - 0:17 | |
| Voici un extrait de la doc de KGF.dll: - Code:
-
dim res%, nom_long$, nom_court$ dll_on "KGF.dll" open_dialog 1 nom_long$ = file_name$(1) if nom_long$="_" then return nom_court$ = string$(255," ") res% = dll_call2("GetShortName",adr(nom_long$),adr(nom_court$)) if res%>0 message "Erreur en conversion" else nom_court$ = trim$(nom_court$) message "nom court="+nom_court$ end_if La fonction GetShortName est dans KGF.dll depuis longtemps, et on trouve sa description dans la rubrique des fonctions diverses. Elle fait appel à une API de Windows et marche dans tous les cas, ce qui n'est pas évident pour les routines fabriquées en Panoramic pur, car la complexité est énorme, et le nom court généré dépend des noms de fichiers présents dans le ou les dossiers, pas uniquement du nom du fichier lui-même. Il en est de même pour la réduction à 8 caractères du nom des dossiers, etc. Je ne voudrais pas rentrer ici dans des discussions techniques sur les règles de conversion, mais lorsqu'on cherche on peu sur le net, ou dans la doc MicroSoft sur MSDN etc, on commence à avoir une idée de la complexité de la chose. C'est pourquoi il n'y a que deux solutions réellement viables: celle de JL35 ou l'API de Windows, donc KGF.dll. Tout le reste se résume à des solutions partielles de cas particuliers. | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Bug EXECUTE/EXECUTE_WAIT Mer 10 Fév 2016 - 0:52 | |
| Les 3 règles d’or pour nommer un fichier sont ici | |
|
| |
Contenu sponsorisé
| Sujet: Re: Bug EXECUTE/EXECUTE_WAIT | |
| |
|
| |
| Bug EXECUTE/EXECUTE_WAIT | |
|