2009-06-10 14 views
15

Lottando con la linea di comando di nuovo, ho capire che posso memorizzare la directory di lavoro corrente in una variabile in questo modo:Come impostare una variabile sul percorso della directory superiore su Windows?

SET current=%cd% 

Come dovrei impostare genitore però? SET parent=%..% non funziona, come si fa eco %..%

In sostanza, chiamando uno script batch C:\a\b\myscript.bat con il seguente contenuto:

@echo off 
set current=%cd% 
echo %current% 

stampe C:\a\b e vorrei impostare una variabile parent in modo che fosse la stampa C:\a senza cambiare la directory di lavoro corrente a ..

È possibile?

risposta

33

Sposta su una directory, ricordando la corrente, impostare il genitore, e poi un salto di una directory, di nuovo al punto di partenza

@echo off 
set current=%cd% 
pushd .. 
set parent=%cd% 
popd 

echo current %current% 
echo parent %parent% 
+0

Perfetto! Ora ricordo di aver visto pushd e popd da qualche parte, ma mi è sfuggito completamente la mente. Grazie per l'aiuto. –

+0

Sei più che benvenuto amico :) –

2

Usa

pushd targetFolder 
set current=%cd% 
popd 

Pushd/popd mantenere uno stack delle directory visitate in precedenza.

+0

grazie anche per il tuo aiuto –

8

Si potrebbe anche fare qualcosa di simile:

 
set current=%CD% 
set parent=%CD%\.. 

E non ti dà il nome canonico del genitore, ma dovrebbe sempre essere un percorso valido per la cartella principale. Sarà anche un po 'più veloce delle soluzioni che coinvolgono pushd e popd, ma non sarà la considerazione principale in un file batch.

Modifica: Si noti che tutte le soluzioni finora, incluso il mio qui, avranno problemi se la cartella corrente è la radice di un'unità. Non c'è un modo pulito e semplice per uscire da quello, dal momento che non c'è nessun genitore di un'unità visibile alla modalità utente.

+1

Questo è un altro modo di guardarlo. Per quanto riguarda la tua modifica, entrambi i modi sembrano non avere problemi con il 'corrente' che è la radice di un disco. C: \ cd .. non ti porterà un livello più in alto ma rimane in C: \ senza frenare, e tecnicamente C: \ è il genitore di C: \ così è bello. Non lo useremo comunque da root;) –

+0

È solo una fonte di discontinuità, o un loop che non si ferma, quindi ho pensato che ne valesse la pena. – RBerteig

+0

Un'altra soluzione semplice, cool! –

Problemi correlati