2010-07-06 21:29:58 +0000 2010-07-06 21:29:58 +0000
68
68

Huidige mapnaam opvragen met een DOS commando?

Is het mogelijk om de huidige mapnaam (niet het huidige directorypad) op te vragen met een DOS commando? Zo ja, hoe?

Het dichtste dat ik erbij kwam was dit, maar het doet het niet:

for /f "delims=\" %%a in ("%CD%") do set CURR=%%a
echo.DIR: %CURR%

note: de bovenstaande poging was mijn poging om de string te tokeniseren en het laatste token als de CURR variabele te krijgen.

Antwoorden (9)

95
95
95
2010-07-06 22:27:07 +0000

Kortste manier die ik heb gevonden:

for %I in (.) do echo %~nxI

of binnen een .bat script:

for %%I in (.) do echo %%~nxI

of in .bat met Get waarde in variabele.

for %%I in (.) do set CurrDirName=%%~nxI
echo %CurrDirName%

Uitleg: http://www.robvanderwoude.com/ntfor.php

nx betekent alleen bestandsnaam en extensie

31
31
31
2010-08-07 14:55:35 +0000

Als je de huidige locatie van het batch-bestand wilt weten (en als je Windows niet al heel oud is), typ dan for /? in een ‘DOS box’ venster. Scroll naar beneden. Lees.

Je zult zien, dat je nu (vanuit binnen de batchfile) deze variabelen kunt lezen:

%0 - as the name how this batchfile was called
%~d0 - as the drive letter where this batchfile is located ('\' in case of share)
%~p0 - as path (without the drive letter) where this batchfile is located
%~n0 - as filename (without suffix) of this batchfile
%~x0 - as filename's suffix (without filename) of this batchfile
%~a0 - as this batchfile's file attributes
%~t0 - as this batchfile's date+time
%~z0 - as this batchfile's filesize
%~dpnx0 - as this batchfile's fully qualified path+filename
[... and then some more ...]

Dit werkt voor veel gevallen. Stel, de batchfile heet mytest.bat. Je kunt het op verschillende manieren aanroepen:

  1. ..\..\to\mytest.bat …………………………. (relatief pad)x2& 2. d:\path\to\mytest.bat ……………………… (volledig pad)
  2. \fileserver\sharename\mytest.bat(pad op externe share)

…en je krijgt altijd de juiste waarde in je variabelen.

16
16
16
2011-11-17 09:20:12 +0000

Persoonlijk vond ik Toms antwoord goed, totdat het moeite had met punten in dir namen. Deze ](http://forums.devshed.com/windows-help-34/finding-last-token-in-batch-file-412970.html) gaf me een hint:

for /f "delims=\" %%a in ("%cd%") do echo topmost dir: %%~nxa
5
5
5
2013-08-06 13:11:55 +0000

Tom’s antwoord is goed, maar als je een directory naam hebt met een punt erin (bv. wxwidgets-2.9.4) krijg je enkel de volledige naam. Dus dit zou wxwidgets-2.9 output geven omdat de .4 behandeld is als een extensie (Ja, ook al is het een directory naam!).

Om de volledige uitvoer naam te krijgen moet je de extensie toevoegen aan het einde:

FOR %I IN (.) DO Echo %~nI%~xI

en in batch file mode:

FOR %%I IN (.) DO Echo %%~nI%%~xI

Of natuurlijk, stel in plaats daarvan een variabele in het batchbestand in:

FOR %%I IN (.) DO SET CurrentD=%%~nI%%~xI
4
4
4
2012-03-15 10:19:31 +0000

Een andere manier is:

set "MyPath=%~dpnx0" & call set "MyPath=%%MyPath:\%~nx0=%%" 
echo MyPath=%MyPath%

het werkt met “.” en spaties in padnaam

Wat doet het?

  1. zet de hele bestandsnaam (driveletter-pad-filnaam-extensie) in MyPath Var

  2. verwijder bestandsnaam en extensie uit MyPath var

Het werkt ook met UNC Paths. Als je de Backslash aan het eind van het Path nodig hebt. Verwijder de `Een andere manier is:

set "MyPath=%~dpnx0" & call set "MyPath=%%MyPath:\%~nx0=%%" 
echo MyPath=%MyPath%

het werkt met “.” en spaties in padnaam

Wat doet het?

  1. zet de hele bestandsnaam (driveletter-pad-filnaam-extensie) in MyPath Var

  2. verwijder bestandsnaam en extensie uit MyPath var

Het werkt ook met UNC Paths. Als je de Backslash aan het eind van het Path nodig hebt. Verwijder de na MyPath in het tweede set-commando, bijv.

set "MyPath=%%MyPath:%~nx0=%%"
4
4
4
2012-04-24 15:54:31 +0000

Je kunt de huidige dir in een variabele krijgen. One-liner:

set a=%cd%

Check met

echo %a%
2
2
2
2016-10-10 02:11:12 +0000

gewoon simpel

for %%d in ("%CD%") do echo %%~nxd

of

set "sPath=."
for %%d in ("%sPath%") do set "sDirName=%%~nxd"

Wees voorzichtig met de backslash van het einde van het pad, het moet geen backslash van het einde zijn.

1
1
1
2011-12-07 18:59:40 +0000

Mijn antwoord in deze draad doet het in 3 eenvoudige regels:

@echo off
SET "CDIR=%~dp0"
:: for loop requires removing trailing backslash from %~dp0 output
SET "CDIR=%CDIR:~0,-1%"
FOR %%i IN ("%CDIR%") DO SET "PARENTFOLDERNAME=%%~nxi"
ECHO Parent folder: %PARENTFOLDERNAME%
ECHO Full path: %~dp0
pause>nul
1
1
1
2015-05-28 16:08:10 +0000

Dit werkt voor mij vanuit een batch-bestand. Het geeft de naam van de huidige werkdirectory.

pushd %1 & for %%i in (.) do @echo %%~ni