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 :

Comment détecter si le paramètre à passer par glisser et déposer est un dossier ou non ? [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut Comment détecter si le paramètre à passer par glisser et déposer est un dossier ou non ?

    Je suis entrain de faire un script batch pour un traitement par lot pour la conversion des fichiers de type .m3u en .lst et en .cfg, alors, j'ai fait déjà un vbscript pour traiter un seul fichier par glisser et déposer ( Drag and Drop) et ça marche bien
    Maintenant mon soucis dans ce batch : Comment détecter si on glisse seulement un dossier et non pas un fichier pour le traitement :

    Le Batch : Conversion_par_Dossier
    Code BAT : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    @ECHO OFF
    Title Conversion des fichiers de type .m3u en .lst et en .cfg by HACKOO
    Mode con cols=70 lines=5
    color 0A 
    IF [%1] EQU [] Goto:Error
    echo.
    CD /D "%~1"
    FOR %%f IN (*.m3u) DO (echo. & echo           Conversion du fichier "%%f" ... & Cscript /NoLogo %~dp0Convert_m3u-lst-cfg.vbs "%%f" & Cls & echo.)
    Start "" explorer "%~1"
    Exit
     
    :Error
    Color 0c
    echo.
    ECHO    Il faut glisser et deposer un dossier sur ce programme batch 
    Timeout /T 6 /NoBreak >nul
    Exit

    Le vbscript : Convert_m3u-lst-cfg.vbs

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    Option Explicit
    Const Titre = "Conversion des fichiers de type .m3u en .lst et en.cfg by © HACKOO"
    Const ForReading = 1
    Const ForWriting = 2
    Const TriStateUseDefault = -2
    Const StartTagName = "<servername=>"
    Const EndTagName = "</servername>"
    Const StartserveurURL = "<serverurl=>"
    Const EndserveurURL = "</serverurl>"
    Const category = "<servercategory=>movies</servercategory>"
    Dim sInfile,sOutfile,oFSO,oInfile,oOutfile,Texte,Folder,Ws,MyDirectory,FileM3UConverted
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set Ws = CreateObject("Wscript.Shell")
    MyDirectory = oFSO.GetParentFolderName(WScript.ScriptFullName)
    '****************************1ère étape : Formater le fichier.m3u déposé, càd enlever toutes les lignes vides***********************************
    ' Obtenir le nom du fichier d'entrée de ligne de commande , si le 2ème paramètre est entré
    ' utiliser le deuxième paramètre en tant que nouveau fichier de sortie, sinon réécriture du fichier d'entrée
    If (WScript.Arguments.Count > 0) Then
        sInfile = WScript.Arguments(0)
            If LCase(oFSO.GetExtensionName(sInfile)) <> "m3u" Then 
                MsgBox "Faites glisser et déposer le fichier.m3u à convertir sur ce script",vbExclamation,Titre
                Wscript.Quit()
            End If    
    Else
        MsgBox "Faites glisser et déposer le fichier.m3u à convertir sur ce script",vbExclamation,Titre
        WScript.Quit
    End If
    If (WScript.Arguments.Count > 1) Then
        sOutfile = WScript.Arguments(1)
    Else
        sOutfile = sInfile
    End If
    ' Lire le fichier en entré dans une variable puis fermetrure de ce dernier
    Folder = GetFilenameWithoutExtension(sInfile) & "_Hackoo-Conversion"
     
    If Not oFSO.FolderExists(Folder) Then
        oFSO.CreateFolder(Folder)
    End If    
    FileM3UConverted = Folder & "\" & GetName(Folder) &".m3u"
    'wscript.echo sInfile
    Set oInfile = oFSO.OpenTextFile(sInfile, ForReading, False, TriStateUseDefault)
    Set oOutfile = oFSO.OpenTextFile(FileM3UConverted, ForWriting, True) 
     
    While Not oInfile.AtEndOfStream
        Texte = oInfile.ReadLine
        Texte = Trim(Texte)
        If ( Len(Texte) > 0 ) Then
            oOutfile.Writeline Texte
        End If
    Wend
    oOutfile.Close
    Set oOutfile = Nothing
    '*****************************2ème étape : Extraire les lignes depuis le fichier formaté .m3u vers un fichier.lst******************************
    Dim strLine,Tab,strNewcontents,i,k,Count,Name,URL,Ligne,sOutfileCfg
    sInfile = FileM3UConverted
    sOutfile = GetFilenameWithoutExtension(sInfile) & ".lst" 
    sOutfileCfg = GetFilenameWithoutExtension(sInfile) & ".cfg"
    If oFSO.FileExists(sOutfile) Then
        oFSO.DeleteFile(sOutfile)
    End If
    Set oInfile = oFSO.OpenTextFile(sInfile, ForReading, False, TriStateUseDefault)
    oInfile.SkipLine()
    Do Until oInfile.AtEndOfStream
        strLine = oInfile.Readline
        strLine = Trim(strLine)
        If Len(strLine) > 0 Then
            strNewcontents = Replace(strNewcontents,"#EXTINF:-1,","")
            strNewcontents = Replace(strNewcontents,"#EXTINF:0,","")
            strNewcontents = Replace(strNewcontents,"#EXTINF:0 ","")
            strNewcontents = Replace(strNewcontents,"#EXTINF:-1 ","")
            strNewContents = strNewContents & strLine & vbCrLf
        End If
    Loop
    oInfile.Close
    Count = 0
    Tab = split(strNewcontents,vbcrlf)
    For i = lbound(Tab) to ubound(Tab) Step 2
        If i Mod 2 = 0 then
            Count = Count + 1
            Name = Trim(Tab(i))
            k = i+1
            If k > UBound(tab) Then Exit For
            URL = Tab(k)
        End If    
        Ligne = StartTagName & Name & EndTagName & StartserveurURL & URL & EndserveurURL & category
        Call WriteLog(Ligne,sOutfile)
        Call WriteLog("I: " & URL & " " & Name,sOutfileCfg)
    Next
    Ws.Popup "La conversion du fichier  "& vbCrLf &  DblQuote(sInfile) & vbCrLf & " est terminé avec succès !","2",Titre,64
    'MsgBox "La conversion du fichier " & vbCrLf &  DblQuote(sInfile) & vbCrLf & " est terminé avec succès !",vbInformation,Titre
    '**********************************************************************************************
    'Fonction pour écrire le résultat dans un fichier texte
    Sub WriteLog(strText,LogFile)
        Dim fs,ts 
        Const ForAppending = 8
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set ts = fs.OpenTextFile(LogFile,ForAppending,True)
        ts.WriteLine strText
        ts.Close
    End Sub
    '**********************************************************************************************
    Function DblQuote(Str)
        DblQuote = Chr(34) & Str & Chr(34)
    End Function
    '**********************************************************************************************
    Function GetFilenameWithoutExtension(ByVal FileName)
      Dim Result, i
      Result = FileName
      i = InStrRev(FileName, ".")
      If ( i > 0 ) Then
        Result = Mid(FileName, 1, i - 1)
      End If
      GetFilenameWithoutExtension = Result
    End Function
    '**********************************************************************************************
    Function GetName(Path)
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    GetName = fso.GetBaseName(path)
    End Function
    '**********************************************************************************************

  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 @hackoo,

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @echo off
     
    set /p var=Nom de l'élement à tester :
     
    call:test %var%
    goto end
     
    :test
    if exist "%~1" (2>nul pushd "%~1" && (popd&set "type=Repertoire") || set "type=Fichier" ) else set "type=Inconnue"
    echo "%~1" = %type%
     
    :end


  3. #3
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut
    Citation Envoyé par sachadee Voir le message
    @hackoo,
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    set /p var=Nom de l'élement à tester :
    call:test %var%
    goto end
    :test
    if exist "%~1" (2>nul pushd "%~1" && (popd&set "type=Repertoire") || set "type=Fichier" ) else set "type=Inconnue"
    echo "%~1" = %type%
    :end
    Sacha +1
    avec ton idée :
    Code BAT : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @echo off
    if exist "%~1" (2>nul pushd "%~1" && (popd  & set "type=FOLDER") || set "type=FILE" ) else set "type=UNKNKOWN"
    echo "%~1" = %type%
    pause
    et pour mon code modifié; j'ai fait ceci :
    Code BAT : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    @ECHO OFF
    Title Conversion des fichiers de type .m3u en .lst et en .cfg by HACKOO
    Mode con cols=70 lines=5
    color 0A 
    echo.
    IF [%1] EQU [] Goto:Error
    CD /D "%~1"
    2>nul cd "%~1" && Goto:Conversion || Goto:Error
    Exit
     
    :Error
    Color 0c
    echo.
    ECHO    Il faut glisser et deposer un dossier sur ce programme batch 
    Timeout /T 6 /NoBreak >nul
    Exit
     
    :Conversion
    FOR %%f IN (*.m3u) DO (echo. & echo           Conversion du fichier "%%f" ... & Cscript /NoLogo %~dp0Convert_m3u-lst-cfg.vbs "%%f" & Cls & echo.)
    Start "" explorer "%~1"
    Exit

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

Discussions similaires

  1. Comment détecter le lancement d'un process par notification ?
    Par masterx_goldman dans le forum Windows
    Réponses: 4
    Dernier message: 23/08/2010, 20h13
  2. Comment détecter la fermeture d'une fenêtre par la croix?
    Par man_coef dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/06/2008, 16h34
  3. Réponses: 3
    Dernier message: 13/02/2008, 16h23
  4. comment savoir par quelle page est passé un visiteur
    Par emilie_per dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2006, 11h11

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