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

Ottenere il nome della cartella corrente con un comando DOS?

È possibile ottenere il nome della cartella corrente (non il percorso della directory corrente) usando un comando DOS? Se sì, come?

Il più vicino che ho ottenuto è stato questo, ma non lo fa:

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

nota: il tentativo di cui sopra era il mio tentativo di tokenizzare la stringa e ottenere l'ultimo token impostato come variabile CURR.

Risposte (9)

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

Il modo più breve che ho trovato:

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

o in uno script .bat:

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

o in .bat con Get value in variabile.

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

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

nx significa solo nome ed estensione del file

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

Se vuoi conoscere la posizione attuale del file batch (e se il tuo Windows non è una versione molto antica), digita for /? in una finestra ‘DOS box’. Scorrere verso il basso. Leggi.

Scoprirete che ora potete leggere (da all'interno del file batch) queste variabili:

%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 ...]

Questo funziona per molti casi. Supponiamo che il file batch si chiami mytest.bat. Potete chiamarlo in diversi modi:

  1. ..\..\to\mytest.bat …………………………. (percorso relativo)
  2. d:\path\to\mytest.bat ……………………… (percorso completo)_
  3. \fileserver\sharename\mytest.bat(percorso sulla condivisione remota)

…e avrete sempre il giusto valore nelle vostre variabili.

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

Personalmente mi è piaciuta la risposta di Toms, fino a quando ha lottato con i punti nei nomi delle directory. Questo mi ha dato un suggerimento:

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

La risposta di Tom è buona, ma se hai un nome di directory con un punto dentro (cioè wxwidgets-2.9.4) otterrai solo il nome completo. Quindi questo produrrebbe invece wxwidgets-2.9 perché il .4 è stato trattato come un'estensione (sì, anche se è un nome di directory!).

Per ottenere il nome completo in uscita devi aggiungere l'estensione alla fine:

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

e in modalità file batch:

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

O naturalmente, impostate invece una variabile nel file batch:

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

Un altro modo è:

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

funziona con “.” e spazi nel pathname

Cosa fa?

  1. mette l'intero nome del file (driveletter-path-filename-extension) in MyPath Var

  2. rimuove nome del file ed estensione da MyPath var

Funziona anche con i percorsi UNC. Se hai bisogno del backslash alla fine del percorso. Rimuovi lo `Un altro modo è:

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

funziona con “.” e spazi nel pathname

Cosa fa?

  1. mette l'intero nome del file (driveletter-path-filename-extension) in MyPath Var

  2. rimuove nome del file ed estensione da MyPath var

Funziona anche con i percorsi UNC. Se hai bisogno del backslash alla fine del percorso. Rimuovi lo dopo lo MyPath nel secondo comando set, ad esempio

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

Puoi ottenere la dir corrente in una variabile. Una riga:

set a=%cd%

Controlla con

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

semplicemente

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

oppure

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

Fate attenzione al backslash della fine del percorso, non deve essere backslash della fine.

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

La mia risposta in questo thread lo fa in 3 semplici linee:

@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

Questo funziona per me da un file batch. Restituisce il nome della directory di lavoro corrente.

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