Jump to content
Strawberry Orange Banana Lime Leaf Slate Sky Blueberry Grape Watermelon Chocolate Marble
Strawberry Orange Banana Lime Leaf Slate Sky Blueberry Grape Watermelon Chocolate Marble

MSFN is made available via donations, subscriptions and advertising revenue. The use of ad-blocking software hurts the site. Please disable ad-blocking software or set an exception for MSFN. Alternatively, register and become a site sponsor/subscriber and ads will be disabled automatically. 



Sign in to follow this  
someuser77

retrieve current directory name in batch

Recommended Posts

someuser77    0

hello. :)

i need to retrieve the current directory name from a batch file in windows 2000.

for example:

if i run the batch file in c:\dir\subdir (c:\dir\subdir\mybat.cmd) i will have a variable that holds the name "subdir" as its the location of the file.

thanks!

Share this post


Link to post
Share on other sites

DL.    0

The current dir is stored in the variable %CD%.

Using the command ECHO %CD% will show you what it is.

Share this post


Link to post
Share on other sites
Yzöwl    30

Is this what you wanted?

for %* in (.) do @echo %~n*


Here it is in a batch, (cmd), file to make it easier to test

@echo off&setlocal enableextensions
:: retrieving  name of current directory
for %%* in (.) do set MyDir=%%~n*
:: adding safety factor for no directory, i.e a drive
if not defined MyDir set MyDir=%CD:\=%
:: telling you what it is
echo/ the current directory is %MyDir%
endlocal&goto :eof

<Edit>

After reading back your first post, it appears as if you are looking for the parent directory of the currently running batch file; this is not the same as the Current Directory and makes the previous response somewhat invalid. However the easiest way to do that is to first of all make the directory containing the batch file also the current directory

@echo off&setlocal enableextensions&pushd %~dp0
for %%* in (.) do @echo %%~n*
popd&endlocal&goto :eof

</Edit>

Edited by Yzöwl

Share this post


Link to post
Share on other sites
emsr21    0

hi everyone :hello:

i'm completely new at this...

could someone possibly please explain Yzöwl's code

for %%* in (.) do @echo %%~n*

i've referred to command-lind reference A-Z

but i don't understand especially those var.. :wacko:

%%*, (.), and %%~n*

thnx

Share this post


Link to post
Share on other sites
Yzöwl    30

Press 'Winkey + R' and in the dialog box enter:

%comspec% /c For /?>%userprofile%\Desktop\ForDetails.txt

Then you can read the text file now located on your desktop!

Share this post


Link to post
Share on other sites
jaclaz    910

I'll try to add my small contribution to the work of the master :thumbup

Since the dawn of DOS, the . (dot) means "current directory" and .. (double dot) means "directory above current".

Try putting this into a batch (like dotexpand.cmd):

@ECHO OFF
CALL :EXPAND . DOT
CALL :EXPAND .. DOUBLE DOT
GOTO :EOF

:EXPAND
ECHO %1 %2
ECHO %~d1 (d=drive)
ECHO %~dp1 (dp=drive and path)
ECHO %~dpn1 (dpn=drive, path and name)
ECHO %~n1 (n=name)
GOTO :EOF

Or, if you prefer:

@ECHO OFF
FOR %%A IN (.) DO (
ECHO %%A
ECHO %%~dA [d=drive]
ECHO %%~dpA [dp=drive and path]
ECHO %%~dpnA [dpn=drive, path and name]
ECHO %%~nA [n=name]
)

In other words:

the * (asterisk) in this case is just a "normal" character assigned to a FOR variable

the . (dot) is the "special" meaning of "current directory"

the %% (double percent) is needed because the variable is run from a batch (from command line use a single %)

the ~ (tilde) is the character for variable expansion. (NT and later only)

the n is one of the available expansion "names". (NT and later only)

See this:

http://www.robvanderwoude.com/ntfor.html

In addition, substitution of FOR variable references has been enhanced.

You can now use the following optional syntax:%~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

jaclaz

Share this post


Link to post
Share on other sites
Pbs    0

i can't believe i can add to the masters both...

for batch file's current dir:

for %%A in ("%~dp0.") do echo %%~nA

:D

i had been using a longer method so i'm killin myself for not seeing yours sooner..

also, for say any file, just add \. to it's path only [for %1 use %p1\.]and use it's name in for loop result..[%~n* ]

so you could have it as a sub-routine and pass paths to it in your batch to get parent dir..[like say,dir of a bunch of mp3s artist dirs

call :getparentdir "d:\path\sub\file.ext"
goto :eof

:getparentdir
for %%A in ("%~dp1.") do echo %%~nA
goto :eof

and use .. ["%~dp0.."] to get dir 2dirs up... :D

my first post..:)

Enjoy!

[edited to add quotes]

Edited by Pbs

Share this post


Link to post
Share on other sites
jaclaz    910

i can't believe i can add to the masters both...

for batch file's current dir:

for %%A in (%~dp0.) do echo %%~nA

Hmm.

Try running your batch in a folder in a path with spaces. :whistle:

Then try running Yzöwl's original one, or, if you prefer, run this:

@ECHO OFF
for %%A in (%~dp0.) do echo %%~nA
for %%* in (.) do @echo %%~n*

Any difference? ;)

my first post..

Welcome to the board. :)

jaclaz

Share this post


Link to post
Share on other sites
Pbs    0

oops, but this fixes that...i ran it in a long name dir, thought it had spaces...


for %%A in ("%~dp0.") do echo %%~nA

:D

nobody's perfect...lol

[it *was* 5am when i wrote it! :)]

was trying to re-encode my music to my phone in diff dirs and keep the artist\album\song.ext structure..

and just tried this, so if you want to go more than 2 dirs up, use

for %%A in (".\..\..\..") do echo %%~nA

goes up 4 dirs.. etc to go up as many as you want...

or relative to batch file itself:

for %%A in ("%~dp0.\..\..\..") do echo %%~nA

it's:

.=1 file's dir

..=2 parent dir [or.\..]

.\..\..=3 up [the parent dirs parent dir]

.\..\..\..=4 up etc etc..

that one surprised me even..nice n short too..

from cmdline try it out:

for %a in (".\..\..") do echo %~na

[since not starting with a file, no leading .]

was there smart juice in my orange juice this morning or what? lol

yesterday i wrote 24->12hr + am/pm conversion completely inside a sqlite query...:D

and dude, i've learned so much over the years from you it's silly...thanx so much for sharing...

Edited by Pbs

Share this post


Link to post
Share on other sites
jaclaz    910

Good. :)

So you have a "fixed", "better" version of:

for %%* in (.) do echo %%~n*

consisting of:

for %%A in ("%~dp0.") do echo %%~nA 

:unsure:

I see it as a "longer" version (even if by a few characters). :whistle:

jaclaz

Share this post


Link to post
Share on other sites
Pbs    0

ahh, but 2 diff things, mine is relative to batch file, other is relative to workingdir...

i use a pvr program that runs batches from a diff dir so makes all the diff to me..[always had to work around that]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×