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

Scripts/Batch Discussion :

Récupérer le nom de fichier avec des caractères inconnus


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    bidouilleur
    Inscrit en
    Novembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 44
    Par défaut Récupérer le nom de fichier avec des caractères inconnus
    Bonsoir à tous.

    Dans une boucle FOR, je lis un fichier ligne par ligne, chaque ligne correspond à un fichier (avec son chemin), je teste si le fichier existe et si oui j’inscris dans un fichier de sortie que le fichier untel est présent/existe.

    Voici ma boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for /f "delims=" %%i in ('type %FileTemp%') do ( 
    	if exist "%%i" (
    		echo [Fichier présent]--- %%i >>%$log%
    	)
    )
    Le problème, c'est pour les fichiers dont je ne connais pas le nom exacte mais juste une partie. Exemple de fichier :

    %WINDIR%\3d8c097a-d75d-43d1-aa88-eb4ad99df514-1.exe

    Les caractères sont aléatoire mais le nom à toujours le même nombre de caractère puis un - puis même nombre de caractères encore un - etc... pour finir par l’extension que je connais aussi.
    Donc dans mon fichier lu ligne par ligne j'utilise le jocker * pour les caractères inconnus, ce qui donne donc comme ligne:

    %WINDIR%\*-*-*-*-*-*.exe

    Si le fichier 3d8c097a-d75d-43d1-aa88-eb4ad99df514-1.exe existe, pas de soucis, il est bien détecté, seulement dans le fichier de sortie ça va marquer [Fichier présent]--- %WINDIR%\*-*-*-*-*-*.exe.
    Ce que je voudrait c'est obtenir le nom réel du fichier, en sachant qu'il y a beaucoup de fichiers testés pour très peu dont je ne connais pas le nom exacte donc je ne peux pas trop alourdir le code/la boucle qui sera exécuté pour chaques lignes/fichiers testés en sachant que très peu sont concernés par le joker *.

    J'espère avoir été assez clair dans mon explication.
    Merci par avance de votre attention.

  2. #2
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,

    utilise juste les delimiteurs :

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for /f "delims=" %%i in ('type %FileTemp%') do ( 
    	if exist "%%i" (
    		echo [Fichier présent]--- %%~nxi >>%$log%
    	)
    )

    Si il te faut le chemin complet :

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    echo [Fichier présent]--- %%~dpnxi >>%$log%


  3. #3
    Membre averti
    Homme Profil pro
    bidouilleur
    Inscrit en
    Novembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 44
    Par défaut
    C'est nickel merci beaucoup.
    Et dans le cas ou je connais le nom du fichier (que je voudrais supprimer), je connais son emplacement également sauf un répertoire dont le nom est aléatoire, exemple:

    C:\Windows\System32\nom_aleatoire\fichier.exe

    Est-ce possible de trouver le nom du répertoire ?

    Merci beaucoup

  4. #4
    Membre averti
    Homme Profil pro
    bidouilleur
    Inscrit en
    Novembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 44
    Par défaut
    Par contre j'ai un autre problème, c'est que quand j'ai ce type de fichier, il y en a plusieurs. Et forcément quand la boucle tombe sur %WINDIR%\*-*-*-*-*-*.exe elle ne traite que le premier fichier trouvé et pas les autres.
    Si je met plusieurs lignes comme ceci dans mon fichier:

    %WINDIR%\*-*-*-*-*-*.exe
    %WINDIR%\*-*-*-*-*-*.exe
    %WINDIR%\*-*-*-*-*-*.exe
    ......

    Seul le premier fichier trouvé est traité plusieurs fois (le nombre de ligne que je met) ce qui est logique. Pour ce cas précis j'ai pu trouver une solution car les fichiers sont comme ceci :

    3d8c097a-d75d-43d1-aa88-eb4ad99df514-1.exe
    3d8c097a-d75d-43d1-aa88-eb4ad99df514-2.exe
    3d8c097a-d75d-43d1-aa88-eb4ad99df514-3.exe
    3d8c097a-d75d-43d1-aa88-eb4ad99df514-4.exe
    ........

    J'ai donc mis :

    %WINDIR%\*-*-*-*-*-1.exe
    %WINDIR%\*-*-*-*-*-2.exe
    %WINDIR%\*-*-*-*-*-3.exe
    ...... jusque 9

    Mais dans le cas ou il n'y aurait pas de suite logique, comment puis-je faire pour traiter tous les fichiers rencontrés et pas seulement le premier ?
    Et aussi pour le problème que j'ai mentionné plus haut, savoir comment récupérer le nom d'un répertoire aléatoire quand on connais le reste du chemin et le nom du fichier qu'il contient ?

    Merci de votre intérêt...

  5. #5
    Membre averti
    Homme Profil pro
    bidouilleur
    Inscrit en
    Novembre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 44
    Par défaut
    Personne n'a une idée? Ou ce n'est peut être pas possible de le récupérer ?

  6. #6
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Pour récuperer tous les fichiers :

    Met une autre boucle dans la première :

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for /f "delims=" %%i in ('type %FileTemp%') do (
    	for /f "delims=" %%a in ('dir /a-d/b "%%i" 2^>nul') do (
    		echo [Fichier présent]--- %%~nxa
    	)
    )

    Et une technique pour récuperer le nom du repertoire contenant un fichier :

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    ;;Le nom du fichier connu
    set $find="test.bat"
     
    for /f "delims=" %%a in ('dir /s/a-d/b *.*') do (
      echo "%%~nxa" | find /i %$find% && echo nom du repertoire : "%%~dpa")


Discussions similaires

  1. Trouver des noms de fichiers avec des caractères non ASCII
    Par llaffont dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 16/10/2012, 14h06
  2. Noms de fichiers avec des caractères spéciaux
    Par weabow dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 24/11/2010, 15h51
  3. [RCP 3.4.2]nom de répertoire avec des caractères arabes
    Par Fabien[ALT] dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 10/07/2009, 12h44
  4. Impossible d'ouvrir nom de fichier avec des accents
    Par sargei dans le forum Langage
    Réponses: 15
    Dernier message: 10/06/2009, 10h46
  5. Réponses: 1
    Dernier message: 31/10/2006, 15h06

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