SimonMag Posted December 20, 2007 Share Posted December 20, 2007 (edited) Hi,I have a problem with a script, I have used some code from an example script that copies a directory with a progress bar, this worked great with my previous version of AutoIT, but now I have upgraded to the newer version and made some changes to the script and compiled I receive the following error:ERROR: $sIstr already declared as parameterIf anyone could shed some light in the right direction.....Thanks.CODE#include <GUIConstants.au3>#Include <File.au3>Opt("GUIOnEventMode", 1)Opt("TrayIconHide", 1)GUICreate("DirCopy", 330,200,-1,-1, $WS_OVERLAPPEDWINDOW)SplashTextOn("Please Wait", "Creating Directories and Copying Files....", 400, 50, -1, -1, 0,"", 12)Sleep(1000)SplashOff()_CopyDirWithProgress("\\fs_xxx\VOL1\Applications\ZfdUpTest\", "C:\ZDM65\")Func _CopyDirWithProgress($sOriginalDir, $sDestDir);$sOriginalDir and $sDestDir are quite selfexplanatory...;This func returns:; -1 in case of critical error, bad original or destination dir; 0 if everything went all right; >0 is the number of file not copied and it makes a log file; if in the log appear as error message '0 file copied' it is a bug of some windows' copy command that does not redirect output... If StringRight($sOriginalDir, 1) <> '\' Then $sOriginalDir = $sOriginalDir & '\'If StringRight($sDestDir, 1) <> '\' Then $sDestDir = $sDestDir & '\'If $sOriginalDir = $sDestDir Then Return -1ProgressOn('Copying Files...', 'Making list of files...' & @LF & @LF, '', -1, -1, 18)Local $aFileList = _FileSearch($sOriginalDir)If $aFileList[0] = 0 ThenProgressOff()SetError(1)Return -1EndIfIf FileExists($sDestDir) ThenIf Not StringInStr(FileGetAttrib($sDestDir), 'd') ThenProgressOff()SetError(2)Return -1EndIfElseDirCreate($sDestDir)If Not FileExists($sDestDir) ThenProgressOff()SetError(2)Return -1EndIfEndIfLocal $iDirSize, $iCopiedSize = 0, $fProgress = 0Local $c, $FileName, $iOutPut = 0, $sLost = '', $sErrorLocal $Sl = StringLen($sOriginalDir)_Quick_Sort($aFileList, 1, $aFileList[0])$iDirSize = Int(DirGetSize($sOriginalDir) / 1024)ProgressSet(Int($fProgress * 100), $aFileList[$c], 'Coping file:')For $c = 1 To $aFileList[0]$FileName = StringTrimLeft($aFileList[$c], $Sl)ProgressSet(Int($fProgress * 100), $aFileList[$c] & ' -> '& $sDestDir & $FileName & @LF & 'Total KiB: ' & $iDirSize & @LF & 'Done KiB: ' & $iCopiedSize, 'Coping file: ' & Round($fProgress * 100, 2) & ' % ' & $c & '/' &$aFileList[0])If StringInStr(FileGetAttrib($aFileList[$c]), 'd') ThenDirCreate($sDestDir & $FileName)ElseIf Not FileCopy($aFileList[$c], $sDestDir & $FileName, 1) ThenIf Not FileCopy($aFileList[$c], $sDestDir & $FileName, 1) Then;Tries a second timeIf RunWait(@ComSpec & ' /c copy /y "' & $aFileList[$c] & '" "' & $sDestDir & $FileName & '">' & @TempDir & '\o.tmp', '', @SW_HIDE)=1 Then;and a third time, but this time it takes the error message$sError = FileReadLine(@TempDir & '\o.tmp',1)$iOutPut = $iOutPut + 1$sLost = $sLost & $aFileList[$c] & ' ' & $sError & @CRLFEndIfFileDelete(@TempDir & '\o.tmp')EndIfEndIfFileSetAttrib($sDestDir & $FileName, "+A-RSH");<- Comment this line if you do not want attribs reset.$iCopiedSize = $iCopiedSize + Int(FileGetSize($aFileList[$c]) / 1024)$fProgress = $iCopiedSize / $iDirSizeEndIfNextProgressOff()If $sLost <> '' Then;tries to write the log somewhere.If FileWrite($sDestDir & 'notcopied.txt',$sLost) = 0 ThenIf FileWrite($sOriginalDir & 'notcopied.txt',$sLost) = 0 ThenFileWrite(@WorkingDir & '\notcopied.txt',$sLost)EndIfEndIfEndIfReturn $iOutPutEndFunc ;==>_CopyDirWithProgressFunc _FileSearch($sIstr, $bSF = 1); $bSF = 1 means looking in subfolders; $sSF = 0 means looking only in the current folder.; An array is returned with the full path of all files found. The pos [0] keeps the number of elements.Local $sIstr, $bSF, $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)If $sCS <> - 1 ThenDo$sCF = FileFindNextFile($sCS)If @error ThenFileClose($sCS)ExitLoopEndIfIf $sCF = '.' Or $sCF = '..' Then ContinueLoop$sOutPut = $sOutPut & $sCP & $sCF & @LFUntil 0EndIf;And after, if needed, in the rest of the folders.If $bSF = 1 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)If $iH <> - 1 ThenDo$sCF = FileFindNextFile($iH)If @error ThenFileClose($iH)ExitLoopEndIfIf $sCF = '.' Or $sCF = '..' Then ContinueLoopIf 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 searches$iH2 = FileFindFirstFile($sFP & $sCriteria); and checked with the criteria.If $iH2 <> - 1 ThenDo$sCF2 = FileFindNextFile($iH2)If @error ThenFileClose($iH2)ExitLoopEndIfIf $sCF2 = '.' Or $sCF2 = '..' Then ContinueLoop$sOutPut = $sOutPut & $sFP & $sCF2 & @LF;Found items are put in the Output.Until 0EndIfEndIfUntil 0EndIf$sBuffer = StringReplace($sBuffer, @CR & $sCS & @LF, '')Until $sBuffer = ''EndIfIf $sOutPut = '' Then$aNull[0] = 0Return $aNullElseReturn StringSplit(StringTrimRight($sOutPut, 1), @LF)EndIfEndFunc ;==>_FileSearchFunc _Quick_Sort(ByRef $SortArray, $First, $Last);Larry's codeDim $Low, $HighDim $Temp, $List_Separator$Low = $First$High = $Last$List_Separator = StringLen($SortArray[ ($First + $Last) / 2])DoWhile (StringLen($SortArray[$Low]) < $List_Separator)$Low = $Low + 1WEndWhile (StringLen($SortArray[$High]) > $List_Separator)$High = $High - 1WEndIf ($Low <= $High) Then$Temp = $SortArray[$Low]$SortArray[$Low] = $SortArray[$High]$SortArray[$High] = $Temp$Low = $Low + 1$High = $High - 1EndIfUntil $Low > $HighIf ($First < $High) Then _Quick_Sort($SortArray, $First, $High)If ($Low < $Last) Then _Quick_Sort($SortArray, $Low, $Last)EndFunc ;==>_Quick_SortSplashTextOn("Please Wait", "Installing Novell Client....", 250, 30, -1, -1, 32,"", 12)RunWait("C:\ZDM65\NovCli\setupnw.exe /acu /u:C:\ZDM65\NovCli\admin\acu.txt", "C:\ZDM65", @SW_MAXIMIZE)SplashOff()SplashTextOn("Please Wait", "Installing ZenWorks Agent....", 250, 30, -1, -1, 32,"", 12)RunWait(@SystemDir & "\msiexec.exe /i C:\ZDM65\ZfdAgent.msi ADDLOCAL=WorkstationManager,RemoteManagement,ApplicationLauncher,Imaging,MirrorDriver ALLUSERS=1 STARTUP_APPEXPLORE=0 REBOOT=ReallySuppress /passive","C:\ZDM65")SplashOff()SplashTextOn("Please Wait", "Installing Registry Settings....", 400, 50, -1, -1, 0,"", 12); Reset client welcome bitmapRegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Novell\NWGINA\Welcome Screen", "Bitmap", "REG_SZ", "NWWELCOME.BMP"); Remove SecEdit settings in base buildRegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SeCEdit\Reg Values\MACHINE/Software/Microsoft/Windows/CurrentVersion/Policies/System/LegalNoticeCaption")RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SeCEdit\Reg Values\MACHINE/Software/Microsoft/Windows/CurrentVersion/Policies/System/LegalNoticeText"); Remove old legal notice textRegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Winlogon" , "legalnoticecaption")RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Winlogon" , "legalnoticetext")RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system" , "legalnoticecaption")RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system" , "legalnoticetext"); Force users to hit C-A-D to login and accept legal noticeRegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" , "DisableCAD" , "REG_DWORD" , "00000000")RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" , "dontdisplaylastusername" , "REG_DWORD" , "00000001")RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" , "legalnoticecaption" , "REG_SZ" , "Important Notice")RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" , "legalnoticetext" , "REG_SZ" , "Do not login unless you are an authorised user. In doing so you agree to abide by ICT Policies as detailed in the document 'Best Practice Policy for the provision and use of ICT' which is available on the IT Services section of the Intranet or from the IT Service Desk.")RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" , "CompatibleRUPSecurity" , "REG_DWORD" , "00000001")RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" , "passwordexpirywarning" , "REG_DWORD" , "00000000"); Synchronise NDS Username with Windows UsernameRegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Novell\Login\TAB SETTINGS\NT Credentials" , "Sync NDS Username" , "REG_DWORD" , "00000001"); Don't display last user nameRegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Novell\Location Profiles\Services\{1E6CEEA1-FB73-11CF-BD76-00001B27DA23}\Default" , "Save On Exit" , "REG_DWORD" , "00000000"); Show Hidden FilesRegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" , "Hidden", "REG_DWORD" , "00000001"); Taskbar - Disable Personalised MenusRegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" , "IntelliMenus" , "REG_SZ" , "NO"); Taskbar - Expand PrintersRegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" , "CascadePrinters" , "REG_SZ" , "YES"); Change Windows Source Path to NetworkRegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" , "SourcePath" , "REG_SZ" , "\\\\FS_xxx\\VOL1\\Winxp\\i386"); Set AWI serverRegWrite("HKEY_LOCAL_MACHINE\Software\Novell\ZENworks\ZENWSREG" , "ImportServer" , "REG_SZ" , "1x.1x.1x.6x");Show Drive letters first in ExplorerRegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer" , "ShowDriveLettersFirst" , "REG_DWORD" , "00000004");Change My Computer to "user" on "PC"RegWrite("HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}" , "LocalizedString" , "REG_EXPAND_SZ" , "%USERNAME% on %COMPUTERNAME%");Clear Temporary Internet Files on exit of IERegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache" , "Persistent" , "REG_DWORD" , "00000000")RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Cache" , "Persistent" , "REG_DWORD" , "00000000");Set Desktop Wallpaper to remain as defaultRegWrite("HKEY_USERS\.DEFAULT\Control Panel\Desktop" , "Wallpaper" , "REG_SZ" , "%WINDIR%\\SYSTEM32\\xxxx.bmp");Display the full path in both placesRegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState" , "Settings" , "REG_BINARY" , "0c,00,02,00,1b,01,e7,77,60,00,00,00")RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState" , "FullPath" , "REG_DWORD" , "00000001")RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState" , "FullPathAddress" , "REG_DWORD" , "00000001");Disable Messenger ServiceRegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Messenger" , "Start" , "REG_DWORD" , "00000004");Force Explorer to Explore and not OpenRegWrite("HKEY_CLASSES_ROOT\Folder\shell" , "" , "REG_SZ" , "explore");Disable "Welcome to Windows" messageRegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Tips" , "Show" , "REG_DWORD" , "00000000");Remove Language barRegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" , "internat.exe")SplashOff()Run('C:\ZDM65\zshutdwn.exe /action:reboot /force /caption:"Restarting, please wait..." /delay:5 /nocancel', "C:\ZDM65") Edited December 20, 2007 by SimonMag Link to comment Share on other sites More sharing options...
Kerros Posted December 20, 2007 Share Posted December 20, 2007 (edited) you are using $sIstr as an argument for the function and redeclaring it, that would cause the argument to be reset, invalidating the function. just change the variable inside the function to something else. Edited December 20, 2007 by Kerros Kerros===============================================================How to learn scripting: Figure out enough to be dangerous, then ask for assistance. Link to comment Share on other sites More sharing options...
PsaltyDS Posted December 20, 2007 Share Posted December 20, 2007 Line 95: Func _FileSearch($sIstr, $bSF = 1) ; $bSF = 1 means looking in subfolders ; $sSF = 0 means looking only in the current folder. ; An array is returned with the full path of all files found. The pos [0] keeps the number of elements. Local $sIstr, $bSF, $sCriteria, $sBuffer, $iH, $iH2, $sCS, $sCF, $sCF2, $sCP, $sFP, $sOutPut = '', $aNull[1] ; EndFunc When you name the input variables in the Func declaration, you automatically declare them Local to that function. So you shouldn't re-declare $sIstr or $bSF inside the function. I believe declaring a variable over again destroys it's contents, so that would cost you your input value also. Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
SimonMag Posted December 20, 2007 Author Share Posted December 20, 2007 Thanks for the pointers, I have removed the $sIstr, $bSF from the line and it is now working again.Thanks.CODELocal $sIstr, $bSF, $sCriteria, $sBuffer, $iH, $iH2, $sCS, $sCF, $sCF2, $sCP, $sFP, $sOutPut = '', $aNull[1] 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