Zip Posted December 24, 2010 Posted December 24, 2010 (edited) Hello.I have 3 files in d:\temp\hmmm [2010] wtf- is this01. Track 1 - hmmm.tmp02. Track 2 - hmmm.tmp03. Track 3 - hmmm.tmpTHIS: $dir= "d:\temp\hmmm [2010] wtf- is this" $num="3" FileMove($dir & "\" & "*.tmp", $dir & "\" & $num & "*.tmp", 0)Results in This:302. Track 2 - hmmm.tmp303. Track 3 - hmmm.tmp3301. Track 1 - hmmm.tmp even worse:FileMove($dir & "\" & "*.tmp", $num & "*.tmp", 0)will delete the files permanently.can anyone Please help me understand why, thanks! Edited December 24, 2010 by Zip
Richard Robertson Posted December 24, 2010 Posted December 24, 2010 Well what are the results you are expecting? Both FileMove calls look a little screwy.
Legacy99 Posted December 24, 2010 Posted December 24, 2010 That's exactly what should happen, This code $dir= "d:\temp\hmmm [2010] wtf- is this" $num="3" FileMove($dir & "\" & "*.tmp", $dir & "\" & $num & "*.tmp", 0) Equals on the destination "d:\temp\hmmm [2010] wtf- is this\3*.tmp" You are concatenating the $NUM variable with your $DIR variable. What are you trying to do?
smashly Posted December 24, 2010 Posted December 24, 2010 (edited) Hi, The behavior does seem strange in the first instance. It appears that FileMove is Moving the first file twice. eg: moves 01. Track 1 - hmmm.tmp > 301. Track 1 - hmmm.tmp moves 301. Track 1 - hmmm.tmp > 3301. Track 1 - hmmm.tmp Which does seem odd and not expected behavior to me. In your second instance FileMove($dir & "\" & "*.tmp", $num & "*.tmp", 0) Doesn't delete the files, it actually moves them to the working directory since you didn't specify a path. Working Directory would be the script directory unless you specify different. Also you'll notice that it works correctly as FileMove can't procees the same file twice as it's not there after first move. My advice would be to either list the files in the directory and then process each file#include <File.au3> $dir= "d:\temp\hmmm [2010] wtf- is this" $aFL2A = _FileListToArray($dir, "*.tmp", 1) $num="3" For $i = 1 To $aFL2A[0] FileMove($dir & "\" & $aFL2A[$i], $dir & "\" & $num & $aFL2A[$i], 0) Next or If you know the starting letter of the file name then use it with a wild card.$dir= "d:\temp\hmmm [2010] wtf- is this" $num="3" FileMove($dir & "\0*.tmp", $dir & "\" & $num & "*.tmp", 0) or Move the files to a new directory then move them back.$dir= "d:\temp\hmmm [2010] wtf- is this" $num="3" FileMove($dir & "\*.tmp", $dir & "\" & $num & "\" & $num & "*.tmp", 8) FileMove($dir & "\" & $num & "\*.tmp", $dir & "\*.tmp", 0) DirRemove($dir & "\" & $num) Not really a solution more a workaround. Edited December 24, 2010 by smashly
Zip Posted December 24, 2010 Author Posted December 24, 2010 Thank you very much smashly .You are right, Obviously, It appears that FileMove is Moving the first file twice.That's why I wrote it in the order I wrote it, & said "strange results". Why does it happen though? a bug?I am quite a newbie in this so your code is appreciated, thanks !
Richard Robertson Posted December 24, 2010 Posted December 24, 2010 You still haven't said what you actually want. We can better help you fix what's wrong if we know what your intent is.
smashly Posted December 24, 2010 Posted December 24, 2010 Thank you very much smashly .You are right, Obviously, It appears that FileMove is Moving the first file twice.That's why I wrote it in the order I wrote it, & said "strange results". Why does it happen though? a bug?I am quite a newbie in this so your code is appreciated, thanks !To be truthful, I don't know if it's a bug.To me it appears to be a bug.The reason I say this is it moves the same file twice.To me there's no logic as if it was meant to do it then why does it only move the first file twice?But I'm sure others will disagree or have a better theory to justify the behavior.Since you now know what happens you can only work around it by using better code practices.Cheers
Zip Posted December 24, 2010 Author Posted December 24, 2010 You still haven't said what you actually want. We can better help you fix what's wrong if we know what your intent is. Well I'm a noob, so I want the simplest of things. Appending a Number to a filename. cannot figure out if something was wrong with my code: $dir= "d:\temp\hmmm [2010] wtf- is this" $num="3" FileMove($dir & "\" & "*.tmp", $dir & "\" & $num & "*.tmp", 0) or it is a bug?
Zip Posted December 24, 2010 Author Posted December 24, 2010 Thanks again smashly, believe it or not, I spent 6 hours on this, insisting on trying different quotes <"> or <'> etc, makes no difference .. Id be grateful If anyone can test it on some Files. 01. Track 1 - hmmm.tmp 02. Track 2 - hmmm.tmp 03. Track 3 - hmmm.tmp etc.
smashly Posted December 24, 2010 Posted December 24, 2010 (edited) Hi, I've already tried your code and I'm getting the same result. As I said work around the problem #include <File.au3> $dir= "d:\temp\hmmm [2010] wtf- is this" $aFL2A = _FileListToArray($dir, "*.tmp", 1) If Not @error Then $num="3" For $i = 1 To $aFL2A[0] FileMove($dir & "\" & $aFL2A[$i], $dir & "\" & $num & $aFL2A[$i], 0) Next Next Cheers Edited December 24, 2010 by smashly
Zip Posted December 24, 2010 Author Posted December 24, 2010 Hi, I've already tried your code and I'm getting the same result. As I said work around the problem #include <File.au3> $dir= "d:\temp\hmmm [2010] wtf- is this" $aFL2A = _FileListToArray($dir, "*.tmp", 1) If Not @error Then $num="3" For $i = 1 To $aFL2A[0] FileMove($dir & "\" & $aFL2A[$i], $dir & "\" & $num & $aFL2A[$i], 0) Next Next Cheers Oh! Thanks for verifying this! Well tbh as a beginner I am scared to do file operations now on real files after this, so I think I am gonna do a cmd /c move & be done with it until I figure out what your code means .. Ill keep your code & study this _FileListToArray, thanks for everything. btw, Is posting a link to this thread in the Bugs section a good idea, or posting here is enough?
Zip Posted December 24, 2010 Author Posted December 24, 2010 I just tried the code, added an ENDIF, #include <File.au3> $dir= "d:\temp\hmmm [2010] wtf- is this" $aFL2A = _FileListToArray ($dir, "*.tmp", 1) If Not @error Then $num="3" For $i = 1 To $aFL2A[0] FileMove($dir & "\" & $aFL2A[$i], $dir & "\" & $num & $aFL2A[$i], 0) Next EndIf is that enough for the code to run? got errors.
Zip Posted December 24, 2010 Author Posted December 24, 2010 (edited) hmm, this is getting interesting. my original idea of resorting back to CMD /C has just turned out to be a joke, Looks like AutoIT is probably using (or having the same problem as?) Microsoft's CMD with my command. Look at this, typing this into a command prompt: G:\hmmm [2010] wtf- is this>set d=7& for %i in (*.tmp) do move "%i" "%d%%i" you will get this: G:\hmmm [2010] wtf- is this>move "1.Tmp" "71.Tmp" G:\hmmm [2010] wtf- is this>move "2.Tmp" "72.Tmp" G:\hmmm [2010] wtf- is this>move "3.Tmp" "73.Tmp" G:\hmmm [2010] wtf- is this>move "71.Tmp" "771.Tmp" G:\hmmm [2010] wtf- is this> Any ideas what's going on ? Edited December 24, 2010 by Zip
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