Script to MOVE file and leave a Shortcut to new location

Discussion in 'Scripting' started by JJ, Jul 22, 2009.

  1. JJ

    JJ Guest


    I am running low on disk space on my server, but need to keep all files
    available. I would like to create a script that will move files that have
    not been accessed after a preset date, to an external hard drive, leaving a
    shortcut where the moved file originally was and pointing to it's new
    location on the external drive.

    So far, I have come up with robocopy to move the files by access date, but
    it doesn't seem to have the ability to leave a shortcut behind.

    Any ideas would be greatly appreciated!!!


    James Thibault
    JJ, Jul 22, 2009
    1. Advertisements

  2. You could use shortcut.exe from
    Pegasus [MVP], Jul 22, 2009
    1. Advertisements

  3. JJ

    JJ Guest

    Thanks for the reply, Pegasus, but I will be moving thousands of files and
    folders and subfolders. A huge directory tree. I don't see an option in the
    switches to do all this in one step. Could you give me an example?

    Say I wanted to move all files not accessed after Jan 1, 2003 from c:\ to
    f:\Backup. I know how to do this with robocopy. How would I use shortcut.exe
    to create shortcuts to all the files the locations hat they
    were moved from....throughout the whole directory tree?


    JJ, Jul 22, 2009
  4. All you need to do is to invoke shortcut.exe once for each file, giving it
    the appropriate names each time, e.g. like so:
    @echo off
    for %%a in (E:\Backup\*.*) do (
    echo shortcut /F:"C:\%%~na.lnk" /A:C /T:"%%a" /W:E:\Backup /R:1

    Since your description about the source and target folders is rather vague,
    you may have to tweak the above batch file a little in order to suit your
    environment. Note also this:
    - You must test the batch file from the Command Prompt. Do not test it from
    the Start/Run box.
    - When you're happy with the result you see, remove the word "echo" in Line
    3 in order to activate the batch file.
    Pegasus [MVP], Jul 22, 2009
  5. JJ

    JJ Guest

    Thanks...I'll give it a try!

    JJ, Jul 22, 2009
  6. JJ

    Al Dunbar Guest

    Copy the code below into a batch file (i.e. backfill.cmd) - watch for line
    wrapping - and then run it from a command prompt window with two parameters:

    backfill "E:\backup" "C:\"

    This script expands on Pegasus' contribution by processing all of the files
    contained within the "huge directory tree" that is C:\backup using the "/R"
    switch of the FOR command. It also avoids re-creating any already existing
    shortcuts, so you could run it after your subsequent robocopy cleanup runs.

    When you are satisfied that the commands being displayed will do the trick,
    change "ECHO/shortcut.exe" to "shortcut.exe".

    REM -----------------------
    @echo off

    (set _sce=%~dpnx1)
    (set _dst=%~dpnx2)
    if not defined _dst (
    echo/syntax: %~nx0 [folder for files] [folder for shortcuts]

    for /r b %%A in (*.*) do CALL:SCUT "%%~A"


    (set _FILE=%~1)
    (call set _SCUT=%%_FILE:%_sce%=%_dst%%%)
    for %%B in ("%_SCUT%") do (set _SCUT=%%~dpnB.lnk)
    if exist "%_SCUT%" (
    echo/shortcut already exists: "%_SCUT%" & pause
    ) else (
    ECHO/shortcut.exe /F:"%_SCUT%" /A:C /T:"%_FILE%"

    REM -----------------------

    Al Dunbar, Jul 26, 2009
  7. JJ

    Al Dunbar Guest

    Oops, I forgot to remove a PAUSE statement...
    A few more thoughts...

    - If users have read/write access there is a possibility that shortcut.exe
    will fail because the folder to where the shortcut is to go has been deleted
    or renamed since the file was moved.

    - If you do subsequent cleanup robocopy runs, perhaps these should go to
    different folders, E:\backup2, E:\backup3, etc.

    - Except for the fact that the shortcuts could be moved or renamed, you
    could run a script to look through E:\backup and delete files whose
    shortcuts have been deleted.

    - I just realized there could be name collisions. Suppose you have files
    test.doc and test.rtf in the same folder. It appears to me that the code
    below will try to make two shortcuts called test.lnk. To have it create
    test.rtf.lnk and test.doc.lnk instead, change this line:

    (set _SCUT=%%~dpnB.lnk)

    to this:

    (set _SCUT=%%~dpnxB.lnk)


    Al Dunbar, Jul 26, 2009
  8. JJ

    JJ Guest

    Thanks so much, Al! I will let you know how it goes.


    JJ, Aug 13, 2009
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.