I have a C3560G-24-TS that I needed to upgrade to the newest version with K9 instead of MZ (so I could enable crypto SSH).

Verify your version
show version

System image file is “flash:c3560-ipbase-mz.122-50.SE5/c3560-ipbase-mz.122-50.SE5.bin”

View the files on your flash drive
dir flash:
In my case I had a folder called “c3560-ipbase-mz.122-50.SE5” with “c3560-ipbase-mz.122-50.SE5.bin” located inside
Also, the newest IOS required 15,072,310 bytes available and my switch had over 20MB free. If I had less than 15MB available I would have to delete the old configuration first.

Copy the old file from your switch to your TFTP
copy flash: tftp:

Source filename: c3560-ipbase-mz.122-50.SE5/c3560-ipbase-mz.122-50.SE5.bin
Address or name of remote host: 192.168.1.222 (your TFTP server)
Destination filename: I just hit enter with the defaults

Copy the new file from your TFTP to your Switch
copy tftp: flash:

Address or name of remote host: 192.168.1.222 (your TFTP server)
Source filename: c3560-ipbasek9-mz.122-58.SE2.bin
Destination filename: I just hit enter with the defaults

Verify the file has been uploaded
dir flash:
Technically you should be able to run verify flash:filenamehere, but I was receiving errors

Change the boot image to the new file
show boot
– notice the BOOT path-list is flash:c3560-ipbase-mz.122-50.SE5/c3560-ipbase-mz.122-50.SE5.bin
conf t
boot system flash:c3560-ipbasek9-mz.122-58.SE2.bin
exit
show boot

– notice the new BOOT path-list is flash:c3560-ipbasek9-mz.122-58.SE2.bin

wr mem
show version

Reload/Reboot the switch
reload
show ver