Come posso ottenere il nome della cartella principale in un prompt dei comandi?

Sono in una Riga di Comando di Windows e si desidera che la cartella principale in una variabile.

Supponendo che la directory corrente è “C:\foo\bar” come posso conoscere il valore del “bar”?

Mi aspettavo qualcosa di simile a un “trova l’ultima barra rovesciata in CD e basta”.

E per favore, non powershell riferimenti; voglio plain old Riga di Comando di Windows operazioni.



4 Replies
  1. 6

    La mia soluzione si avvale di sostituzione e di opere per la root directory:

    call set PARENT_DIR=%CD%
    set PARENT_DIR=%PARENT_DIR:\= %
    set LAST_WORD=
    for %%i in (%PARENT_DIR%) do set LAST_WORD=%%i
    echo %LAST_WORD%
    
    • Si mi ha battuto ad esso e si dispone di una soluzione migliore – non sono sicuro miniera di opere per le cartelle principali.
  2. 3

    Questo appare per ottenere il nome della directory corrente, e lo memorizza nella variabile di ambiente bar:

    for %i in (%CD%) do set bar=%~ni
    

    Questo funziona perché %CD% contiene la directory corrente, e %~n strisce di uscita del loop (loop per un valore, %CD%) per il ‘nome del file’ parte.

    (Nota, se si utilizza questo in un file batch, è possibile utilizzare %%i e %%~ni invece.)

    Non per questo, però, i lavori per la directory radice dell’unità, sarà invece la unset bar, come %~ni valuterà a nulla.

    • Si rompe anche il nome della cartella se il nome della cartella contiene un punto (punto). Ma per il resto, è l’asso!
    • Utilizzare %~nxi di directory di supporto per le estensioni.
    • Non lavoro se ci sono spazi. Ho preso a lavorare (doppio% perché in un file batch) quando ho scritto: FOR /F "delims=" %%i IN ("%CD%") DO SET bar=%%~nxi
  3. 1

    Pmod è una sequenza ordinata di soluzione; io non sono sicuro di miniera di opere per le cartelle principali. Ma ho pensato di includere qui per le persone a vedere.

    set myPath=%cd%
    pushd ..
    set parentPath=%cd%
    popd
    echo myPath = "%myPath%"
    echo parentPath = "%parentPath%"
    call set myDir=%%myPath:%parentPath%\=%%
    echo myDir = "%myDir%"
    
  4. 1

    @pmod risposta (mi manca la rep di commento) possono lavorare per la root directory, ma non funziona se ci sono gli spazi nei nomi.

    Ecco una versione leggermente migliorata (sostituendo /per spazio di prima divisione, poi invertire la sostituzione quando finito).

    call set PARENT_DIR=%CD%
    set PARENT_DIR=%PARENT_DIR: =/%
    set PARENT_DIR=%PARENT_DIR:\= %
    set LAST_WORD=
    for %%i in (%PARENT_DIR%) do set LAST_WORD=%%i
    set LAST_WORD=%LAST_WORD:/= %
    echo %LAST_WORD%
    

Lascia un commento