junjie1800 Posted May 14, 2009 Share Posted May 14, 2009 Hi I really need help with creating a batch file that does the following. pleas help! 1) Delete "X.jpg" from directory A, 2) Choose random .jpg file in directory B and rename it to "X.jpg", 3) Move "X.jpg" from Directory b to directory A. Please help Link to comment Share on other sites More sharing options...
0 Antaris Veteran Posted May 14, 2009 Veteran Share Posted May 14, 2009 Hi, Something like the following should work, although I haven't tested it. Dim firstPath : firstPath = "C:\Users\Matt\Desktop\TestFolder1\" Dim secondPath : secondPath = "C:\Users\Matt\Desktop\TestFolder2\" Dim fileSystemObject : Set fileSystemObject = CreateObject("Scripting.FileSystemObject") Dim fileName : fileName = "x.jpg" If (fileSystemObject.FileExists(firstPath & fileName)) Then fileSystemObject.DeleteFile firstPath & fileName End If Dim allFiles: Set allfiles = fileSystemObject.GetFolder(secondPath).Files Dim imageFiles : Set imageFiles = CreateObject("Scripting.Dictionary") Dim count : count = 1 Dim file For Each file In allFiles If (Right(Lcase(file.Name), 4) = ".jpg") Then imageFiles.Add count, file.Name count = count + 1 End If Next Randomize Dim random : random = Int((count - 1 + 1) * Rnd + 1) fileSystemObject.MoveFile secondPath & imageFiles(random), firstPath & fileName The idea is we do the following: If the target image currently exists, delete it. Get a list of all the available files in the source directory. Create a list of all the available images in the source directory. Generate a random number used as the key in the dictionary of available images. Perform the rename of the source image as we move it to the target directory. Make sure you test it first, as I haven't. Link to comment Share on other sites More sharing options...
0 junjie1800 Posted May 15, 2009 Author Share Posted May 15, 2009 Hi,Something like the following should work, although I haven't tested it. Dim firstPath : firstPath = "C:\Users\Matt\Desktop\TestFolder1\" Dim secondPath : secondPath = "C:\Users\Matt\Desktop\TestFolder2\" Dim fileSystemObject : Set fileSystemObject = CreateObject("Scripting.FileSystemObject") Dim fileName : fileName = "x.jpg" If (fileSystemObject.FileExists(firstPath & fileName)) Then fileSystemObject.DeleteFile firstPath & fileName End If Dim allFiles: Set allfiles = fileSystemObject.GetFolder(secondPath).Files Dim imageFiles : Set imageFiles = CreateObject("Scripting.Dictionary") Dim count : count = 1 Dim file For Each file In allFiles If (Right(Lcase(file.Name), 4) = ".jpg") Then imageFiles.Add count, file.Name count = count + 1 End If Next Randomize Dim random : random = Int((count - 1 + 1) * Rnd + 1) fileSystemObject.MoveFile secondPath & imageFiles(random), firstPath & fileName The idea is we do the following: If the target image currently exists, delete it. Get a list of all the available files in the source directory. Create a list of all the available images in the source directory. Generate a random number used as the key in the dictionary of available images. Perform the rename of the source image as we move it to the target directory. Make sure you test it first, as I haven't. Hi really appreciate but I need it in MSDOS command prompt. Windows batch file. Are you able to help as well? Link to comment Share on other sites More sharing options...
0 fhpuqrgrpgvirzhpujbj Posted May 15, 2009 Share Posted May 15, 2009 Batch simply isn't advanced enough to do this. Random selection is the main problem, it has no method to find a random number. Complex things like this aren't for batch. Use vb.net, its simple and its the language the previous poster used. If needed you could use vb.net and choose 'Console Application' to run it in a command prompt window. Link to comment Share on other sites More sharing options...
0 PVVnT(0)L Posted May 17, 2009 Share Posted May 17, 2009 (edited) Wrong, you can do this. You would just have to know the names of the .jpg files in the Directory B, and how many. @echo off set 1=A .jpg file location in directory B. (C:\Directory B\) set 2=A .jpg file location in directory B. (C:\Directory B\) set 3=A .jpg file location in directory B. (C:\Directory B\) set 4=A .jpg file location in directory B. (C:\Directory B\) \\keep on doing this for how ever many .jpg files there are set /a random2=%random%%%5 if %random2%==1 set random2=%1% if %random2%==2 set random2=%2% if %random2%==3 set random2=%3% if %random2%==4 set random2=%4% \\keep on doing this for how ever many .jpg files there are del C:\Directory A\X.jpg ren %random2% X.jpg move C:\Directory B\X.jpg C:\Directory A\ echo A new, random .jpg file has replaced the old .jpg in Directory A. pause On line number 7, you have to change the "5" to 1 more than the currrent number of .jpg files Directory B. This is so that it selects a number 1-n. Edited May 17, 2009 by PVVnT(0)L Link to comment Share on other sites More sharing options...
0 SenHu Posted June 4, 2009 Share Posted June 4, 2009 Hi I really need help with creating a batch file that does the following. pleas help!1) Delete "X.jpg" from directory A, 2) Choose random .jpg file in directory B and rename it to "X.jpg", 3) Move "X.jpg" from Directory b to directory A. Please help junjie: Did you mean copy instead of rename ? (This technique is used to show random images on a web page.) Good responses so far. Here is an alternate script that would work on Windows. This is not absolutely random but comes clsoe. (Please test it first.) var str list; lf -n "*.jpg" "DirectoryB" # DirectoryB is the directory B. var int count; set $count = { len $list } var int s; set $s = makeint(str({chex "12[" gettime()})) var int random; set $random = $count/60*($s+1) # We want to copy random'th file to X.jpg. var str file; set $file = { lex makestr(int($random)) $list } system copy $file "DirectoryA/X.jpg" # DirectoryA is the directory A. This script is in biterscripting ( http://www.biterscripting.com ). Email me if you need further help. Sen Link to comment Share on other sites More sharing options...
Question
junjie1800
Hi I really need help with creating a batch file that does the following. pleas help!
1) Delete "X.jpg" from directory A,
2) Choose random .jpg file in directory B and rename it to "X.jpg",
3) Move "X.jpg" from Directory b to directory A.
Please help
Link to comment
Share on other sites
5 answers to this question
Recommended Posts