stev379 Posted November 21, 2006 Share Posted November 21, 2006 (edited) I need to replace spaces in our directory structure with underscores. The script below is close, but once it renames the first directory, it fails. I think it's still using the variable value prior to when the first directory gets renamed and since it can't find it any longer, it fails. Any tips on how to get this working, or if there's a better way? Thanks! expandcollapse popupGlobal $cCollection, $oFSO, $oItem, $oFolder Global $cFiles Dim $TopFolder, $Path, $Name, $NameLen, $NewName, $NumberReplaced, $DirMove $TopFolder = (@WorkingDir & "\Test\") $oFSO = ObjCreate('Scripting.FileSystemObject') $oFolder = $oFSO.GetFolder($TopFolder) ;msg($oFolder.path) $cFiles = $oFolder.Files For $oFile in $cFiles msg($oFile.path) Next RemoveSpaces($oFolder) Func RemoveSpaces($oFolder) If Not @error Then $cCollection = $oFolder.SubFolders For $oItem In $cCollection ;msg("$oItem.Path = " & $oItem.Path) ;msg("$oItem.Path = " & $oItem.Name) $Name = $oItem.Name $Path = $oItem.Path $NameLen = StringLeft($path,StringLen($path)-StringLen($Name)) ;msg("$NameLen = " & $NameLen) $cFiles = $oItem.Files ;msg("$Name = " & $Name) If StringInStr($Name, " ") Then $NewName = StringReplace($Name, " ", "_") $NumberReplaced = @extended $DirMove = DirMove($oItem.Path, $NameLen & "\" & $NewName) msg("$DirMove = " & $DirMove & " 1 is successfull" & @CRLF _ & $NumberReplaced & "spaces replaced") msg("$NewName = " & $NewName) EndIf RemoveSpaces($oItem) Next ElseIf @error Then msg("@error") EndIf EndFunc ;RemoveSpaces() Func msg($msg) MsgBox(0, "msgbox", $msg) EndFunc Edited November 21, 2006 by stev379 Link to comment Share on other sites More sharing options...
lod3n Posted November 22, 2006 Share Posted November 22, 2006 Try this:#include <Constants.au3> $TopFolder = (@WorkingDir & "\Test\") $foo = Run(@ComSpec & " /c dir /s /b", $TopFolder, @SW_HIDE, $STDOUT_CHILD) $output = "" While 1 $output &= StdoutRead($foo) If @error Then ExitLoop Wend $output = StringStripWS($output,3) $aDirs = stringsplit($output,@crlf,1) for $i = $aDirs[0] to 1 step -1 ; we have to do the subdirectories first $dir = $aDirs[$i] if stringinstr(FileGetAttrib($dir),"D") Then $slashloc = StringInStr($dir,"\",0,-1) $dirname = stringmid($dir,$slashloc+1) $parentname = stringleft($dir,$slashloc) $newdir = $parentname & StringReplace($dirname," ","_") DirMove ($dir,$newdir) EndIf Next [font="Fixedsys"][list][*]All of my AutoIt Example Scripts[*]http://saneasylum.com[/list][/font] Link to comment Share on other sites More sharing options...
jerem488 Posted July 8, 2007 Share Posted July 8, 2007 (edited) Hello lod3n, Your script function very well. But I would like you explain each line. I can tell you, your script functioned for certain files once, but after he didn't function ??? Thank you in advance. Edited July 8, 2007 by jerem488 Qui ose gagneWho Dares Win[left]CyberExploit[/left] 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