Funzionalità nascoste dei file batch di Windows



Answers

PUSHD path

Ti porta nella directory specificata dal percorso .

POPD

Ti riporta alla directory da cui "spingevi".

Question

Quali sono alcune delle funzioni meno conosciute, ma importanti e utili dei file batch di Windows?

Linee guida:

  • Una funzione per risposta
  • Fornire sia una breve descrizione della funzione sia un esempio , non solo un collegamento alla documentazione
  • Limitare le risposte alla funzionalità nativa , ad esempio, non richiede software aggiuntivo, come il Resource Kit di Windows

Chiarimento: facciamo riferimento qui agli script elaborati da cmd.exe, che è l'impostazione predefinita per le varianti WinNT.

(Vedi anche: file batch di Windows: .bat vs .cmd? )




Ho sempre trovato difficile leggere i commenti contrassegnati da una parola chiave su ciascuna riga:

REM blah blah blah

Più facile da leggere:

:: blah blah blah



se la struttura dei blocchi:

if "%VS90COMNTOOLS%"=="" (
  echo: Visual Studio 2008 is not installed
  exit /b
)



esempio di sottrazione di stringa su date e time per ottenere il file denominato "AAAA-MM-GG HH: MM: SS.txt"

echo test > "%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%_%time:~3,2%_%time:~6,2%.txt"

Uso il color per indicare se il mio script ha avuto esito positivo, non è riuscito o ha bisogno di qualche input modificando il colore del testo e dello sfondo. Aiuta davvero quando hai un po 'di macchina a portata di vista ma abbastanza lontano

colore XY

dove X e Y è un valore esadecimale da 0 a F , dove X - sfondo, Y - testo, quando X = Y colore non cambierà.

colore Z

cambia il colore del testo in 'Z' e imposta lo sfondo nero, 'color 0' non funzionerà

per i nomi dei colori chiama

colore ?




Separatori di comandi:

cls & dir
copy a b && echo Success
copy a b || echo Failure

Alla seconda riga, il comando dopo && viene eseguito solo se il primo comando ha esito positivo.

Alla 3a riga, il comando dopo || viene eseguito solo se il primo comando non è riuscito.




PAUSE

Interrompe l'esecuzione e visualizza il seguente prompt:

Press any key to continue . . .

Utile se si desidera eseguire un batch facendo doppio clic su di esso in Esplora risorse e si desidera visualizzare effettivamente l'output anziché solo un lampo della finestra di comando.




Utilizzando CALL, EXIT / B, SETLOCAL e ENDLOCAL è possibile implementare subroutine con variabili locali.

esempio:

@echo off

set x=xxxxx
call :sub 10
echo %x%
exit /b

:sub
setlocal
set /a x=%1 + 1
echo %x%
endlocal
exit /b

Questo stamperà

11
xxxxx

anche se: sub modifica x.




Sfuggire al "plumbing":

echo ^| ^< ^> ^& ^\ ^^



TheSoftwareJedi ha già menzionato il comando per, ma ho intenzione di menzionarlo di nuovo in quanto è molto potente.

Di seguito viene riportata la data corrente nel formato AAAAMMGG, la utilizzo durante la generazione di directory per i backup.

for /f "tokens=2-4 delims=/- " %a in ('DATE/T') do echo %c%b%a



Cerca e sostituisci quando imposti le variabili d'ambiente:

> @set fname=%date:/=%

... rimuove "/" da una data per l'uso in nomi di file con data e ora.

e sottostringhe anche ...

> @set dayofweek=%fname:~0,3%



Non fornisce molte funzionalità, ma è possibile utilizzare il comando title per un paio di usi, ad esempio fornire lo stato su un lungo script nella barra delle attività o solo per migliorare il feedback degli utenti.

@title Searching for ...
:: processing search
@title preparing search results
:: data processing



Creare un file vuoto:

> copy nul filename.ext



Il comando FOR ! Mentre odio scrivere file batch, ne sono grato.

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

analizzerebbe ogni riga in myfile.txt, ignorando le righe che iniziano con un punto e virgola, passando il 2 ° e 3 token da ogni riga al corpo per, con token delimitati da virgole e / o spazi. Si noti che per le istruzioni del corpo si fa riferimento a% i per ottenere il secondo token,% j per ottenere il terzo token e% k per ottenere tutti i token rimanenti dopo il terzo.

Puoi anche usarlo per iterare su directory, contenuti di directory, ecc ...




Il percorso (con l'unità) in cui è scritto lo script: ~ dp0

set BAT_HOME=%~dp0
echo %BAT_HOME%
cd %BAT_HOME%



Puoi concatenare le affermazioni per ottenere un effetto come un booleano "e" di corto circuito.

if foo if bar baz



Links