• 0

Batch Script to delete, choose random, rename and move. PLEASE HELP!


Question

5 answers to this question

Recommended Posts

  • 0

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:

  1. If the target image currently exists, delete it.
  2. Get a list of all the available files in the source directory.
  3. Create a list of all the available images in the source directory.
  4. Generate a random number used as the key in the dictionary of available images.
  5. 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.

  • 0
  Antaris said:
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:

  1. If the target image currently exists, delete it.
  2. Get a list of all the available files in the source directory.
  3. Create a list of all the available images in the source directory.
  4. Generate a random number used as the key in the dictionary of available images.
  5. 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?

  • 0

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.

  • 0

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 by PVVnT(0)L
  • 0
  Quote
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

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • No download links, please.
    • CMF's new Watch 3 Pro is already 20% off by Taras Buria CMF, a budget-focused subbrand of Nothing, recently announced its third-generation smart watch, the CMF Watch 3 Pro. Right after launch, the smart watch received a nice 20% discount, allowing you to get this already inexpensive watch at an even lower price on Amazon. The CMF Watch 3 Pro offers quite a lot of features for an $80 gadget. In addition to displaying time and notifications on a circular 60Hz AMOLED display with always-on mode support, it packs a more accurate heart rate sensor with blood oxygen tracking and stress measurement. It also has dual-band GPS for precise workout tracking, over 130 built-in exercises, Bluetooth calling support, and even ChatGPT integration. The latter lets you ask ChatGPT from your wrist without reaching for your phone. The watch is IP68 rated, which means it can withstand sweat and water splashes. As for the battery life, CMF promises 13 days on a single charge. The CMF Watch 3 Pro is available in two colors: Ash Gray and Dark Gray. Both variants have color-matching silicone bands, which you can replace with any other band that matches the size. The CMF Watch 3 Pro is compatible with modern iPhones and Android devices, and you can pair it to your phone using the Nothing X application from the Apple App Store or Google Play Store. CMF Watch 3 Pro Smart Watch - $79 | 20% off This Amazon deal is US-specific and not available in other regions unless specified. If you don't like it or want to look at more options, check out the Amazon US deals page here. Get Prime (SNAP), Prime Video, Audible Plus or Kindle / Music Unlimited. Free for 30 days. As an Amazon Associate, we earn from qualifying purchases.
    • Thank you, EU. Too bad US will never do that.
    • Debian is getting better and better with each new release, more attractive now than Ubuntu even for beginners.
    • Actually, when Windows came to "play" decades ago, they never left. Play took over the Operating System to the detriment of business of serious consumer users. Made worse, in the Microsoft removed the option to have a "non-play oriented version of the OS" (as in a separate SKU).
  • Recent Achievements

    • First Post
      Electronic Person earned a badge
      First Post
    • Week One Done
      CyberCeps666 earned a badge
      Week One Done
    • Very Popular
      d4l3d earned a badge
      Very Popular
    • Dedicated
      Stephen Leibowitz earned a badge
      Dedicated
    • Dedicated
      Snake Doc earned a badge
      Dedicated
  • Popular Contributors

    1. 1
      +primortal
      629
    2. 2
      ATLien_0
      240
    3. 3
      Xenon
      163
    4. 4
      neufuse
      124
    5. 5
      +FloatingFatMan
      124
  • Tell a friend

    Love Neowin? Tell a friend!