I am trying to make a batch script for converting .m3u files to .lst and .cfg.
So, i made already a vbscript to treat a single file by drag and drop and it works fine. Now my worries in this batch: How to detect if the parameter to go through drag and drop is a folder or not ?
Batch File :
@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"
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
The Vbscript : Convert_m3u-lst-cfg.vbs
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
'**********************************************************************************************