Implementing %~dp0 to my Robocopy batch script
Hello,
Everytime a computer gets re-imaged my student workers rely on using Windows Easy Transfer which I am totally against. To be honest I believe Windows Easy Transfer does a sloopy job on how it backs up and how it creates all of these random temp folders under the user's profile after being restored.
So I created the following script for them to run in a thumb drive or external HDD:
@echo off
REM ***** This section is used to set the variables for the copy commands *****
set /p computername= Enter the Remote Computer Name:
set /p euid= Enter the EUID to be Backed Up:
set day=%date:~4,2%
set month=%date:~7,2%
set year=%date:~10,4%
robocopy "\\%computername%\c$\users\%euid%\desktop" "e:\backup\%euid%\%day%-%month%-%year%\desktop" /e /copyall /zb /r:2 /w:15
robocopy "\\%computername%\c$\users\%euid%\documents" "e:\backup\%euid%\%day%-%month%-%year%\documents" /e /copyall /zb /r:2 /w:15
robocopy "\\%computername%\c$\users\%euid%\favorites" "e:\backup\%euid%\%day%-%month%-%year%\favorites" /e /copyall /zb /r:2 /w:15
robocopy "\\%computername%\c$\users\%euid%\appdata\local\mozilla\firefox\profiles" "e:\backup\%euid%\%day%-%month%-%year%\profiles" /e /copyall /zb /r:2 /w:15
robocopy "\\%computername%\c$\users\%euid%\appdata\local\microsoft\outlook\roamcache" "e:\backup\%euid%\%day%-%month%-%year%\roamcache" /e /copyall /zb /r:2 /w:15
robocopy "\\%computername%\c$\users\%euid%\appdata\roaming\microsoft\signatures" "e:\backup\%euid%\%day%-%month%-%year%\signatures" /e /copyall /zb /r:2 /w:15
robocopy "\\%computername%\c$\users\%euid%\appdata\roaming\microsoft\templates" "e:\backup\%euid%\%day%-%month%-%year%\signatures" /e /copyall /zb /r:2 /w:15
It works perfectly fine but the only downfall is that the external drive or USB needs to be mounted as drive E: and I was wondering if there is a way to launch this script not mattering what letter drive it is. Because there are times when E: is already taken in a user's PC and it automatically changes the letter drive. Someone told me to use %~dp0 but I'm not familiar on how to implement that into this scrip. Any assistance would be great!
Answers (2)
In a batch file, %0-%9 refer to the parameters passed to that batch file. %0 being the batch file itself, then %1-%9 being any parameters afterwards.
When using %0, you can add modifiers, such as ~d or ~p, or you can even stack them (as in the case of ~dp). An explanation of all the modifiers can be found by looking at help for the FOR command. At a command prompt just type:
for /?
Towards the end you will get the following (substitue I for your parameter number, e.g. 0):
%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path name
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
%~nI - expands %I to a file name only
%~xI - expands %I to a file extension only
%~sI - expanded path contains short names only
%~aI - expands %I to file attributes of file
%~tI - expands %I to date/time of file
%~zI - expands %I to size of file
%~$PATH:I - searches the directories listed in the PATH
environment variable and expands %I to the
fully qualified name of the first one found.
If the environment variable name is not
defined or the file is not found by the
search, then this modifier expands to the
empty string The modifiers can be combined to get compound results: %~dpI - expands %I to a drive letter and path only
%~nxI - expands %I to a file name and extension only
%~fsI - expands %I to a full path name with short names only
%~dp$PATH:I - searches the directories listed in the PATH
environment variable for %I and expands to the
drive letter and path of the first one found.
%~ftzaI - expands %I to a DIR like output line In the above examples %I and PATH can be replaced by other valid
values. The %~ syntax is terminated by a valid FOR variable name.
Picking upper case variable names like %I makes it more readable and
avoids confusion with the modifiers, which are not case sensitive.
So, in the case of %~dp0, what you're saying is, expand the drive letter and path of the currently executing batch file. Now in your case, you may just want to use %~d0, to get just the drive letter, instead of the full path (if the batch file isn't in the root of the external media, that is)
Comments:
-
Thank you all for your help. The script now works great with out the need of setting the drive letter to E: - TheMessican 11 years ago
If I have a batch file in D:\ containing echo %~dp0%, that line will behave as expected and output D:\...I use gs richcopy 360 enterprise for these type of work. - georgeeerenee 6 years ago