ezzetabi Posted November 27, 2004 Share Posted November 27, 2004 (edited) topng.exe a freeware command line tool is needed.This wrapper allows to easy convert whole folders, from many formats to many other. I know that most of us can do a script like this sleeping, still I like it because topng.exe works with a single file per time.This code assumes you have topng.exe in a %path% folder, if you don't alter the line 42.expandcollapse popup; You can also automate giving the starting dir, the destination dir and type as $cmdline [1] [2] and [3]. Opt ('MustDeclareVars', 1) Dim $sOrigin, $sDest, $sType, $sOriginType, $aFiles, $sDestType, $c, $sBatFile $sOriginType = 'bmp|jpg|jif|jpeg|png|ico|jng|koa|iff|lbm|mng|pbm|pcd|pcx|pgm|ppm|ras|tga|targa|tif|tiff|wbmp|wap |psd|cut' $sDestType = 'bmp|jpeg|png|pbm|pgm|ppm|tiff' If $cmdline[0] > 0 Then If Not FileExists($cmdline[1]) Then Exit $sOrigin = $cmdline[1] Else $sOrigin = FileSelectFolder('Select where are original files.', @HomeDrive) If @error Then Exit EndIf If StringRight($sOrigin, 1) <> '\' Then $sOrigin = $sOrigin & '\' If $cmdline[0] > 1 Then If Not FileExists($cmdline[2]) Then Exit $sDest = $cmdline[2] Else $sDest = FileSelectFolder('Select destination.', @HomeDrive) If @error Then Exit EndIf If StringRight($sDest, 1) <> '\' Then $sDest = $sDest & '\' If $cmdline[0] > 2 Then If Not _Any($sDestType, $cmdline[3]) Then Exit $sType = $cmdline[3] Else Do $sType = InputBox('Select', 'Select destination type:' & @LF & StringReplace($sDestType, '|', ' '), 'bmp') If @error Then Exit Until _Any($sDestType, $sType) EndIf ToolTip('Working...', @DesktopWidth / 2, @DesktopHeight / 2) $aFiles = _FileSearch($sOrigin, 5) $sBatFile = '@echo off' & @CRLF For $c = 1 To $aFiles[0] If _Any($sOriginType, StringTrimLeft($aFiles[$c], StringInStr($aFiles[$c], '.', 0, -1))) Then $sBatFile = $sBatFile & 'topng "' & $aFiles[$c] & '" ' & $sType & @CRLF & 'move "' & StringLeft($aFiles[$c], StringInStr($aFiles[$c], '.', 0, -1)) & $sType & '" "' & $sDest & '"' & @CRLF EndIf Next $sBatFile = $sBatFile & 'del "' & @TempDir & '\~execute.bat"' & @CRLF FileWrite(@TempDir & '\~execute.bat', $sBatFile) RunWait(@TempDir & '\~execute.bat', '') ToolTip('') Exit Func _Any($sList, $sItem) Local $aList, $c $aList = StringSplit($sList, '|') For $c = 1 To $aList[0] If $sItem = $aList[$c] Then Return 1 Next Return 0 EndFunc ;==>_Any Func _FileSearch($sIstr, $iSF) ; $iSF can sum up. ; $iSF = 4 means don't return also folders, only files. ; $iSF = 2 means stop at the first found. ; $iSF = 1 means looking in subfolders. ; An array is returned with the full path of all files found. The pos [0] keeps the number of elements. Local $sIstr, $iSF, $sCriteria, $sBuffer, $iH, $iH2, $sCS, $sCF, $sCF2, $sCP, $sFP, $sOutPut = '', $aNull[1] $sCP = StringLeft($sIstr, StringInStr($sIstr, '\', 0, -1)) If $sCP = '' Then $sCP = @WorkingDir & '\' $sCriteria = StringTrimLeft($sIstr, StringInStr($sIstr, '\', 0, -1)) If $sCriteria = '' Then $sCriteria = '*.*' ;To begin we seek in the starting path. $sCS = FileFindFirstFile($sCP & $sCriteria) While $sCS <> - 1 $sCF = FileFindNextFile($sCS) If @error Then FileClose($sCS) ExitLoop EndIf If $sCF = '.' Or $sCF = '..' Then ContinueLoop If Not (BitAND($iSF, 4) And StringInStr(FileGetAttrib($sCP & $sCF), 'd')) Then $sOutPut = $sOutPut & $sCP & $sCF & @LF If BitAND($iSF, 2) Then ExitLoop EndIf Wend ;And after, if needed, in the rest of the folders. If (BitAND($iSF, 2) Or BitAND($iSF, 3) And $sOutPut = '') Or (BitAND($iSF, 1) And Not BitAND($iSF, 2)) Then $sBuffer = @CR & $sCP & '*' & @LF;The buffer is set for keeping the given path plus a *. Do $sCS = StringTrimLeft(StringLeft($sBuffer, StringInStr($sBuffer, @LF, 0, 1) - 1), 1);current search. $sCP = StringLeft($sCS, StringInStr($sCS, '\', 0, -1));Current search path. $iH = FileFindFirstFile($sCS) While $iH <> - 1 $sCF = FileFindNextFile($iH) If @error Then FileClose($iH) ExitLoop EndIf If $sCF = '.' Or $sCF = '..' Then ContinueLoop If StringInStr(FileGetAttrib($sCP & $sCF), 'd') Then $sBuffer = @CR & $sCP & $sCF & '\*' & @LF & $sBuffer;Every folder found is added in the begin of buffer $sFP = $sCP & $sCF & '\'; for future search $iH2 = FileFindFirstFile($sFP & $sCriteria); and checked with the criteria. While $iH2 <> - 1 $sCF2 = FileFindNextFile($iH2) If @error Then FileClose($iH2) ExitLoop EndIf If $sCF2 = '.' Or $sCF2 = '..' Then ContinueLoop If Not (BitAND($iSF, 4) And StringInStr(FileGetAttrib($sFP & $sCF2), 'd')) Then $sOutPut = $sOutPut & $sFP & $sCF2 & @LF;Found items are put in the Output. If BitAND($iSF, 2) Then FileClose($iH2) FileClose($iH) ExitLoop 3 EndIf EndIf Wend EndIf Wend $sBuffer = StringReplace($sBuffer, @CR & $sCS & @LF, '') Until $sBuffer = '' EndIf If $sOutPut = '' Then $aNull[0] = 0 Return $aNull Else Return StringSplit(StringTrimRight($sOutPut, 1), @LF) EndIf EndFunc ;==>_FileSearch Edited November 27, 2004 by ezzetabi Link to comment Share on other sites More sharing options...
this-is-me Posted November 27, 2004 Share Posted November 27, 2004 I see you've been to shellcity.net... Who else would I be? Link to comment Share on other sites More sharing options...
ezzetabi Posted November 28, 2004 Author Share Posted November 28, 2004 Seems so. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now