cambia il comando di directory cd ..non funziona nel file batch dopo l’installazione di npm

Ho il seguente comando in un file bat.

echo STEP12 cd HDC git config --global url."https://".insteadOf git:// echo STEP13 cd hui-components-style npm install --registry http://localhost:23510 cd .. 

In STEP13, dopo il comando npm install cd.. non funziona. Non torna alla cartella genitore HDC. ho altri comandi da eseguire nella cartella principale. Mi sto facendo alcuni errori di syntax?

npm è un eseguibile o uno script che modifica la directory corrente e non la ripristina prima di uscire.

Suggerisco di usare al posto di

 cd hui-components-style 

il comando

 pushd hui-components-style 

e usare al posto di

 cd .. 

il comando

 popd 

Per i dettagli sui 2 comandi – push e pop directory – apri una finestra del prompt dei comandi ed esegui pushd /? e popd /? per visualizzare l’aiuto per ogni comando.

Una spiegazione per una migliore comprensione utilizzando percorsi assoluti.

  1. La directory corrente è C:\Temp\HDC .
  2. Il comando pushd hui-components-style salva C:\Temp\HDC su stack e imposta come nuova directory corrente C:\Temp\HDC\hui-components-style .
  3. viene eseguito npm che modifica la directory corrente.
  4. Il comando popd ottiene C:\Temp\HDC dallo stack e imposta questa directory come directory indipendente indipendente da quale directory è la directory corrente.

Quindi il codice con queste due modifiche è:

 echo STEP12 cd HDC git config --global url."https://".insteadOf git:// echo STEP13 pushd hui-components-style npm install --registry http://localhost:23510 popd 

Se npm è un file batch, è necessario utilizzare la call comando, es

 call npm install --registry http://localhost:23510 

In caso contrario, l’elaborazione dei comandi del file batch corrente viene continuata su npm.bat e qualsiasi comando si trovi nel file batch corrente dopo che la riga con npm non viene mai elaborata dall’interprete dei comandi di Windows. Per i dettagli sui vari metodi per eseguire un file batch, vedere la risposta su Come chiamare un file batch, ovvero due livelli in alto rispetto alla directory corrente . E vedere anche la risposta sul comando copia nel file batch non viene eseguita quando si chiama il file batch da un altro file batch, ma viene eseguito quando faccio doppio clic .

In alternativa sarebbe anche ansible usare il seguente codice:

 echo STEP12 cd HDC git config --global url."https://".insteadOf git:// echo STEP13 cd hui-components-style setlocal npm install --registry http://localhost:23510 endlocal cd ..\ 

Il comando setlocal segue:

  1. Spinge il percorso della directory corrente sullo stack.
  2. Spinge lo stato delle estensioni di comando sullo stack.
  3. Spinge lo stato di espansione ritardata sullo stack.
  4. Spinge in pila l’indirizzo di memoria della tabella delle variabili d’ambiente corrente.
  5. Crea una copia della tabella delle variabili d’ambiente corrente in memoria e rende triggers questa nuova tabella delle variabili d’ambiente.

Questi 5 passaggi vengono sempre eseguiti anche con il setlocal chiamato con 1 o 2 delle 4 opzioni possibili EnableExtensions , DisableExtensions , EnableDelayedExpansion , DisableDelayedExpansion per modificare anche lo stato delle estensioni dei comandi e / o l’espansione delle variabili di ambiente ritardate.

Ora npm può modificare la directory di lavoro corrente, aggiungere, eliminare e modificare le variabili di ambiente, abilitare / disabilitare le estensioni di comando e abilitare / disabilitare l’utilizzo dell’espansione ritardata.

Ma tutte quelle modifiche sull’ambiente di elaborazione dei comandi non hanno importanza dopo il prossimo comando endlocal perché endlocal

  1. cancella la tabella dell’ambiente corrente;
  2. elabora l’indirizzo di memoria della precedente tabella di ambiente da stack e utilizza questo indirizzo con conseguente ripristino delle variabili di ambiente iniziali;
  3. apre lo stato di espansione ritardata dallo stack e disabilita / abilita l’espansione ritardata di conseguenza;
  4. apre lo stato delle estensioni di comando dallo stack e disabilita / abilita le estensioni dei comandi di conseguenza;
  5. apre il precedente percorso della directory corrente dallo stack e imposta la directory corrente su questo percorso per ripristinare la directory corrente.

Per esempi che dimostrano che vedere le risposte su

  • Perché il mio cd% myVar% viene ignorato? (esempio per la gestione attuale delle directory di lavoro)
  • Echoing di un URL in batch (esempio per la variabile di ambiente e la gestione di espansione ritardata)

I nomi dei due comandi sono in realtà auto esplicativi:

  • setlocal … imposta l’ambiente del processo di comando locale in base all’ambiente corrente.
  • endlocal … termina l’ambiente del processo di comando locale e ripristina l’ambiente precedente.