|
Answer» HI
I have the following script given to me as a .VBS file but im trying to get it to run as a .BAT file as I need it to show it running and transferring files as you do on the DOS when you run .CMD file. Can this be done?
Code: [Select]Option Explicit
' Global variables Dim strBaseDir, strDestDir Dim objFSO, objFile Dim arrFiles(), i Dim lngFolderSize, intFolderNumber, strNextDir, intMoveFile
' Define paths to work with strBaseDir = "B:\EE\EE29124343\base" strDestDir = "B:\EE\EE29124343\dest"
' Set maximum size of new folders Const cMaxFolderSize = 500000000
' Define class that will hold file information Class File Public lngSize Public strPath End Class
' CREATE file system object Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
' Fully resolve paths strBaseDir = objFSO.GetAbsolutePathname(strBaseDir) strDestDir = objFSO.GetAbsolutePathname(strDestDir)
' Make sure the folders exists, exit if not If Not objFSO.FolderExists(strBaseDir) Then WScript.Echo "*ERROR* Folder does not exist: """ & strBaseDir & """." WScript.Quit End If If Not objFSO.FolderExists(strDestDir) Then WScript.Echo "*ERROR* Folder does not exist: """ & strDestDir & """." WScript.Quit End If
' INITIALIZE array index variable i = -1
' Load info for each file into array (using File class) For Each objFile In objFSO.GetFolder(strBaseDir).Files ' Don't include any files with size greater than max allowed in a folder If objFile.Size > cMaxFolderSize Then WScript.Echo "*WARNING* Skipping file: """ & objFile.Path & """, size:""" & objFile.Size & """ exceeds maximum folder size:""" & cMaxFolderSize & """." Else ' Add another element to the array of type File class i = i + 1 ReDim Preserve arrFiles(i) Set arrFiles(i) = New File
' Store the size and full path to the file arrFiles(i).strPath = objFile.Path arrFiles(i).lngSize = objFile.Size End If Next
' If no files found then exit If i = -1 Then WScript.Echo "*WARNING* No files found to process." WScript.Quit End If
' Sort the files arrary by size in descending order SortArray arrFiles
' Process all files moving to new subfolders until done intFolderNumber = 0 Do ' Start a new destination folder and create it (MUST NOT ALREADY EXIST) lngFolderSize = cMaxFolderSize intFolderNumber = intFolderNumber + 1 strNextDir = strDestDir & "\" & intFolderNumber & "\" objFSO.CreateFolder strNextDir
' Move files to dest folder until full Do ' Look for the largest file left that will fit in remaining space intMoveFile = GetFileToMove(arrFiles, lngFolderSize)
' If we found another file to move then move it If intMoveFile <> -1 Then Wscript.Echo "*DEBUG* Dest:[" & intFolderNumber & "], Available:[" & lngFolderSize & "], File:[" & arrFiles(intMoveFile).strPath & "], Size:[" & arrFiles(intMoveFile).lngSize & "]." objFSO.MoveFile arrFiles(intMoveFile).strPath, strNextDir lngFolderSize = lngFolderSize - arrFiles(intMoveFile).lngSize arrFiles(intMoveFile).lngSize = -1 End If Loop Until intMoveFile = -1
Loop Until AllFilesMoved(arrFiles)
Function GetFileToMove(ByRef arrArray(), lngSize) ' FIND next largest file to move that fits, -1 if none found Dim i GetFileToMove = -1 For i = LBound(arrArray) To UBound(arrArray) If arrArray(i).lngSize <> -1 Then If arrArray(i).lngSize <= lngSize Then GetFileToMove = i End If Exit Function End If Next End Function
Function AllFilesMoved(ByRef arrArray()) ' See if all files have been moved Dim i AllFilesMoved = TRUE For i = LBound(arrArray) To UBound(arrArray) If arrArray(i).lngSize <> -1 Then AllFilesMoved = False Exit Function End If Next End Function
Sub SortArray(ByRef arrArray()) ' Sort array of files by size, descending order (simple bubble sort) Dim i, j, intTemp For i = LBound(arrArray) to UBound(arrArray) For j = LBound(arrArray) to UBound(arrArray) - 1 ' If arrArray(j).lngSize < arrArray(j + 1).lngSize Then If LCase(arrArray(j).strPath) > LCase(arrArray(j + 1).strPath) Then Set intTemp = arrArray(j + 1) Set arrArray(j + 1) = arrArray(j) Set arrArray(j) = intTemp Set intTemp = Nothing End If Next Next End SubQuote as I need it to show it running and transferring files Is this homework?
the VBS can be called from the batch or even generated dynamically within the batch to write an output to a .vbs file and then that .vbs called from batch, but batch execution will still be a batched environment and the .vbs script will still be the vb script environment.
Not sure why you cant just run the .vbs unless your trying to get around some sort of block that disallows execution of .vbs files to which what you have going on in the .vbs would have to be all handled by batch alone and batch has limitations and thats why people use other scripting languages as well as pair batch with other scripting languages to handle where batch ISNT well suited.No its not homework.
Tell you what it is im running the VBS no problem but it dosent show anything whilst it is running and there will be numerous people using it and im frightened that they will think nothing is happening and will close it. I just thought that a .BAT file would show it running or is there another way you can show a VBS script running.There are two script engines for running Visual Basic Script code (.vbs files)
wscript.exe (default) - no console window, scripts seem to run invisibly unless you have message boxes etc. Each Wscript.echo command shows a message box with an OK button. You have to click this before the script will move on.
cscript.exe - opens a console window. Each Wscript.echo command shows text in the console, just like the echo command in batch scripts. After it shows the text, it moves on straight away, without waiting.
You can Google to find out all about these, how to use them, etc. I have to tell you your script would need some changes before it would be any use under cscript.exe. Many thanks that makes sense.
I think that I would be going more for CSCRIPT so I will google that and have a look.
Thanks
|