In my bat script, I'm calling another script and passing it a string parameter
cscript log.vbs "triggered from folder <foldername> by Eric"
The string parameter as you can see contains the name of the folder from which the script is being called. What's the right way to pass this dynamically insert this folder name to the script?
If you want the directory where you're currently at, you can get that from %cd%
. That's your current working directory.
If you're going to be changing your current working directory during the script execution, just save it at the start:
set startdir=%cd%
then you can use %startdir%
in your code regardless of any changes later on (which affect %cd%
).
If you just want to get the last component of that path (as per your comment), you can use the following as a baseline:
@setlocal enableextensions enabledelayedexpansion @echo off set startdir=%cd% set temp=%startdir% set folder= :loop if not "x%temp:~-1%"=="x\" ( set folder=!temp:~-1!!folder! set temp=!temp:~0,-1! goto :loop ) echo.startdir = %startdir% echo.folder = %folder% endlocal && set folder=%folder%
This outputs:
C:\Documents and Settings\Pax> testprog.cmd startdir = C:\Documents and Settings\Pax folder = Pax
It works by copying the characters from the end of the full path, one at a time, until it finds the \
separator. It's neither pretty nor efficient, but Windows batch programming rarely is :-)
EDIT
Actually, there is a simple and very efficient method to get the last component name.
for %%F in ("%cd%") do set "folder=%~nxF"
Not an issue for this situation, but if you are dealing with a variable containing a path that may or may not end with \
, then you can guarantee the correct result by appending \.
for %%F in ("%pathVar%\.") do set "folder=%~nxF"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With