Comando per eseguire un file .bat

Sto cercando di fare in modo che il mio script di sviluppo di Visual Studio esegua un file .bat che faccia qualcosa di importante.

Ecco cosa voglio fare adesso:

cd "F:\- Big Packets -\kitterengine\Common\" Template.bat 

Ma non funziona.

Devo farlo per farlo funzionare:

 cd "F:\- Big Packets -\kitterengine\Common\" F: Template.bat 

Ma questo è piuttosto difficile da aggiungere allo script di Visual Studio.

Come posso farlo in una sola riga?

Può fare riferimento a qui: https://ss64.com/nt/start.html

 start "" /DF:\- Big Packets -\kitterengine\Common\ /W Template.bat 

"F:\- Big Packets -\kitterengine\Common\Template.bat" preceduto da una call (vedi call /? ). Oppure Cd /d "F:\- Big Packets -\kitterengine\Common\" & Template.bat .


Cheat Sheet di CMD

  • cmd.exe

  • Ottenere aiuto

  • Punteggiatura

  • Denominazione dei file

  • Avvio dei programmi

  • chiavi

CMD.exe

La prima cosa da ricordare è un modo di operare un computer. È il modo in cui lo abbiamo fatto prima che WIMP (Windows, icone, mouse, menu a comparsa) diventasse comune. Deve le sue radici a CPM, VMS e Unix. È stato utilizzato per avviare programmi e copiare ed eliminare file. Inoltre è ansible modificare l’ora e la data.

Per assistenza su come avviare CMD digitare cmd /? . È necessario avviarlo con l’ /k o /c meno che non si desideri semplicemente digitarlo.

Ottenere aiuto

Per l’aiuto generale. Digitare Help nel prompt dei comandi. Per ogni comando elencato scrivi help (es. help dir ) o /? (es. dir /? ).

Alcuni comandi hanno comandi secondari. Ad esempio schtasks /create /? .

L’aiuto del comando NET è inusuale. Digitando net use /? è un aiuto breve. Digitare net help use per l’aiuto completo. Lo stesso vale per root – net /? è anche un aiuto breve, usa la guida in net help .

I riferimenti in Guida a nuovi comportamenti descrivono i cambiamenti da CMD in OS / 2 e Windows NT4 al CMD corrente che si trova in Windows 2000 e versioni successive.

WMIC è un comando multifunzione. Digita wmic /? .


Punteggiatura

 & seperates commands on a line. && executes this command only if previous command's errorlevel is 0. || (not used above) executes this command only if previous command's errorlevel is NOT 0 > output to a file >> append output to a file < input from a file 2> Redirects command error output to the file specified. (0 is StdInput, 1 is StdOutput, and 2 is StdError) 2>&1 Redirects command error output to the same location as command output. | output of one command into the input of another command ^ escapes any of the above, including itself, if needed to be passed to a program " parameters with spaces must be enclosed in quotes + used with copy to concatinate files. EG copy file1+file2 newfile , used with copy to indicate missing parameters. This updates the files modified date. EG copy /b file1,, %variablename% a inbuilt or user set environmental variable !variablename! a user set environmental variable expanded at execution time, turned with SelLocal EnableDelayedExpansion command % (%1) the nth command line parameter passed to a batch file. %0 is the batchfile's name. %* (%*) the entire command line. %CMDCMDLINE% - expands to the original command line that invoked the Command Processor (from set /?). % or %% (%A or %%A) the variable in a for loop. Single % sign at command prompt and double % sign in a batch file. \\ (\\servername\sharename\folder\file.ext) access files and folders via UNC naming. : (win.ini:streamname) accesses an alternative steam. Also separates drive from rest of path. . (win.ini) the LAST dot in a file path separates the name from extension . (dir .\*.txt) the current directory .. (cd ..) the parent directory \\?\ (\\?\c:\windows\win.ini) When a file path is prefixed with \\?\ filename checks are turned off. 

Denominazione dei file

 < > : " / \ | Reserved characters. May not be used in filenames. Reserved names. These refer to devices eg, copy filename con which copies a file to the console window. CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9 CONIN$, CONOUT$, CONERR$ -------------------------------- Maximum path length 260 characters Maximum path length (\\?\) 32,767 characters (approx - some rare characters use 2 characters of storage) Maximum filename length 255 characters 

Avvio di un programma

Vedi start /? e call /? per aiuto su tutti e tre i modi.

Esistono due tipi di programmi Windows: console o non console (questi sono chiamati GUI anche se non ne hanno uno). I programmi di console si collegano alla console corrente o Windows crea una nuova console. I programmi GUI devono creare le proprie windows in modo esplicito.

Se non viene fornito un percorso completo, Windows esegue una ricerca

  1. La directory da cui è stata caricata l’applicazione.

  2. La directory corrente per il processo genitore.

  3. Windows NT / 2000 / XP: la directory di sistema di Windows a 32 bit. Utilizzare la funzione GetSystemDirectory per ottenere il percorso di questa directory. Il nome di questa directory è System32.

  4. Windows NT / 2000 / XP: la directory di sistema di Windows a 16 bit. Non esiste una funzione che ottenga il percorso di questa directory, ma viene cercata. Il nome di questa directory è System.

  5. La directory di Windows. Utilizzare la funzione GetWindowsDirectory per ottenere il percorso di questa directory.

  6. Le directory elencate nella variabile di ambiente PATH.

Specificare un nome di programma

Questo è il modo standard per avviare un programma.

 c:\windows\notepad.exe 

In un file batch, il batch attenderà l’uscita del programma. Quando viene digitato il prompt dei comandi non attende l’uscita dei programmi grafici.

Se il programma è un file batch, il controllo viene trasferito e il resto del file batch chiamante non viene eseguito.

Usa il comando Start

Start avvia i programmi in modi non standard.

 start "" c:\windows\notepad.exe 

Start avvia un programma e non aspetta. I programmi della console iniziano in una nuova finestra. L’utilizzo dell’opzione /b forza i programmi della console nella stessa finestra, annullando lo scopo principale di Start.

Start utilizza la shell grafica di Windows, come quando si digita WinKey + R (finestra di dialogo Esegui). Provare

 start shell:cache 

Anche i nomi dei programmi registrati in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths possono essere digitati senza specificare un percorso completo.

Si noti inoltre che la prima serie di virgolette, se presenti, DEVE essere il titolo della finestra.

Usa il comando Chiama

La chiamata viene utilizzata per avviare i file batch e attendere che escano e continuare il file batch corrente.

Altri nomi di file

La digitazione di un nome file non programma equivale a fare doppio clic sul file.


chiavi

Ctrl + C esce da un programma senza uscire dalla finestra della console.

Per altri tasti di modifica digitare Doskey /? .

  • e richiamano i comandi

  • ESC cancella la riga di comando

  • F7 visualizza la cronologia dei comandi

  • ALT + F7 cancella la cronologia dei comandi

  • F8 cerca la cronologia dei comandi

  • F9 seleziona un comando per numero

  • ALT + F10 cancella le definizioni delle macro

Inoltre non elencato

  • Ctrl + o Sposta una parola alla volta

  • Ctrl + Backspace Elimina la parola precedente

  • Inizio Inizio della linea

  • Fine della linea

  • Ctrl + Fine Cancella alla fine della riga

Ci sono molte possibilità per risolvere questo compito.

1. ESEGUI il file batch con percorso completo

La soluzione più semplice è eseguire il file batch con percorso completo.

 "F:\- Big Packets -\kitterengine\Common\Template.bat" 

Una volta raggiunto il file batch Template.bat , non è ansible tornare allo script precedente nel caso in cui la riga di comando sopra sia all’interno di un file * .bat o * .cmd.

La directory corrente per il file batch Template.bat è la directory corrente del processo corrente. Nel caso di Template.bat necessario che la directory di questo file batch sia la directory corrente, il file batch Template.bat deve contenere dopo che @echo off come seconda riga la seguente riga di comando:

 cd /D "%~dp0" 

Esegui in una finestra del prompt dei comandi cd /? per essere visualizzato l’aiuto di questo comando che spiega parametro /D … cambia nella directory specificata anche su una diversa unità.

Esegui in una call /? finestra del prompt dei comandi call /? per ottenere visualizzato l’aiuto di questo comando utilizzato anche in 2., 4. e 5. soluzione e spiegando anche %~dp0 … unità e percorso dell’argomento 0 che è il nome del file batch.

2. CHIAMARE il file batch con percorso completo

Un’altra soluzione sta chiamando il file batch con percorso completo.

 call "F:\- Big Packets -\kitterengine\Common\Template.bat" 

La differenza con la prima soluzione è che dopo il completamento del file batch Template.bat l’elaborazione batch continua nello script batch che contiene questa riga di comando.

Per la directory corrente, leggi sopra.

3. Modificare la directory e il file batch RUN con una riga di comando

Esistono 3 operatori per l’esecuzione di più comandi su una riga di comando: & , && e || .
Per i dettagli vedi risposta su Linea singola con più comandi usando il file batch di Windows

Suggerisco per questo compito l’operatore && .

 cd /D "F:\- Big Packets -\kitterengine\Common" && Template.bat 

Come nella prima soluzione, non c’è ritorno allo script corrente se questo è un file * .bat o * .cmd e la modifica della directory e la continuazione dell’elaborazione batch su Template.bat esito positivo.

4. Modificare la directory e il file batch CALL con una riga di comando

Questa riga di comando cambia la directory e in caso di successo chiama il file batch.

 cd /D "F:\- Big Packets -\kitterengine\Common" && call Template.bat 

La differenza con la terza soluzione è il ritorno allo script batch corrente all’elaborazione di Template.bat .

5. Modificare la directory e il file batch CALL mantenendo l’ambiente corrente con una riga di comando

Le quattro soluzioni sopra cambiano la directory corrente ed è sconosciuto ciò che Template.bat fa riguardo

  1. directory corrente
  2. variabili ambientali
  3. comando estensioni stato
  4. stato di espansione ritardato

Nel caso in cui sia importante mantenere l’ambiente di corrente * .bat o * .cmd script non modificato da qualsiasi modifica Template.bat in ambiente per sé, è consigliabile utilizzare setlocal e endlocal .

Esegui in una finestra del prompt dei comandi setlocal /? e endlocal /? per aver visualizzato l’aiuto di questi due comandi. E leggi la risposta sul comando cambia directory cd .. non funziona nel file batch dopo l’installazione di npm spiegando più dettagliatamente cosa fanno questi due comandi.

 setlocal & cd /D "F:\- Big Packets -\kitterengine\Common" & call Template.bat & endlocal 

Ora c’è solo & invece di && usato in quanto è importante qui che dopo l’esecuzione di setlocal viene finalmente eseguito anche il comando endlocal .


UN ALTRO NOTA

Se il file batch Template.bat contiene il comando exit senza parametro /B e questo comando viene realmente eseguito, il processo di comando viene sempre chiuso indipendentemente dalla gerarchia di chiamata. Quindi assicurati che Template.bat contenga exit /B o goto :EOF invece di exit se c’è exit usata in questo file batch.